0

こんにちは、jsonを解析したい

 {
        "entityType":"Account",


        "values":[
                {
                    "name":"accountType",
                    "type":"lookup",
                    "typeinfo":{"entity":"lov", "filter":"LOV_ACCOUNT_TYPE"}
                },
                {
                    "name":"irstSubType",
                    "type":"lookup",
                    "typeinfo":{"entity":"lov", "filter":"LOV_ACCOUNT_TYPE"}
                },
                {
                    "name":"accountStatus",
                    "type":"lookup",
                    "typeinfo":{"entity":"lov", "filter":"LOV_ACCOUNT_STATUS"}
                },
                {
                    "name":"name",
                    "type":"string",
                    "typeinfo":{"width":80}
                },
                {
                    "name":"updated",
                    "type":"datetime",
                    "typeinfo":{"format":"dd/MM/yyyy hh:MM:ss"}
                }
          ]
    }

ここで typeinfo オブジェクトの実装が変更されています.. Gson ライブラリはこれにどのように対応していますか? インターフェイスが機能しません。

4

3 に答える 3

0

他の回答にもかかわらず、2 つのフィールドが同じ名前で異なる型を持つ可能性があるため、typeinfo の可能な変数ごとにフィールドを持つことはお勧めできません。

本当にやりたいことは、データを typeinfo から Map<String, Object> に変換することです。

これは Gson では困難ですが、デシリアライザーを使用することは可能です。この例については、Kevin の回答を参照してください。

于 2013-09-26T13:48:16.190 に答える
0

価値

public class Value {
private String name;
private String type;    
private  TypeInfo typeinfo;
public String getName() {
    return name;
}
public String getType() {
    return type;
}
public TypeInfo getTypeinfo() {
    return typeinfo;
}
}

マイグソン

public class MyGson {
private String entityType;
private List<Value> values;

public String getEntityType() {
    return entityType;
}
public List<Value> getValues() {
    return values;
}
}

TypeInfo

public class TypeInfo {

private String format;
private String entry;
private String filter;

public String getFormat() {
    return format;
}

public String getEntry() {
    return entry;
}

public String getFilter() {
    return filter;
}
}

ランチャー

    Gson gson = new Gson();

    MyGson myGson = gson.fromJson(str, MyGson.class);

    List<Value> values = myGson.getValues();


    for(Value value : values){

        str = value.getTypeinfo().getFormat();


        printValues("format", value.getTypeinfo().getFormat());
        printValues("entry", value.getTypeinfo().getEntry());
        printValues("filter", value.getTypeinfo().getFilter());
        //....
    }




}

private static void printValues(String key, String data){
    if(data != null){
        System.out.println(key + ": " + data);
    }
}

出力:

filter: LOV_ACCOUNT_TYPE
filter: LOV_ACCOUNT_TYPE
filter: LOV_ACCOUNT_STATUS
format: dd/MM/yyyy hh:MM:ss
于 2013-09-26T13:36:38.783 に答える
-1
        String s = "...json string ..";
        JSONParser jsonparser = new JSONParser();
        JSONObject jsonObject = (JSONObject)jsonparser.parse(s);
        JSONArray values = (JSONArray) jsonObject.get("values");

        for(int i=0; i< values.size(); i++){
            JSONObject value = (JSONObject)values.get(i);
            JSONObject typeInfo = (JSONObject)value.get("typeinfo");
            Iterator it = typeInfo.keySet().iterator();
            while(it.hasNext()){
                Object key = it.next();
                System.out.println("KEY:" + key + " VALUE:" + typeInfo.get(key));
            }
        }
于 2013-09-26T13:32:21.830 に答える