1

こんにちは、GSON labirary を使用して、JSON NESTED Array を Java Objects に変換することに行き詰まっています。

これが私のJSON文字列です

[{\"name\":\"3214657890RootSAPSSE\",\"children\":[{\"name\":\"672BENIAMEEN .Sales Base Market SectionCustomer Representative\"},{\"name\":\"672BENIAMEEN .Sales Base Market SectionPeão\"}]}] 

私は自分のコードをテストしましたがx="[{\"name\":\"MyNode\"}]";、このために私のJavaコードは

Gson gson = new Gson(); 
java.lang.reflect.Type type = new TypeToken<List<EmployeeJSONObj>>(){}.getType();
List<EmployeeJSONObj>l = gson.fromJson(x, type);
System.out.println("hello "+l.get(0).getName());

AND EmployeeJSONObj はクラスです

public class EmployeeJSONObj {
    private String name;
    EmployeeJSONObj()
    {

    }
    public String getName()
    {
        return name;
    }

}

これはうまくいっています。しかし、JSON文字列を次のように変更すると、このコードでエラーが発生します

[{\"name\":\"3214657890RootSAPSSE\",\"children\":[{\"name\":\"672BENIAMEEN .Sales Base Market SectionCustomer Representative\"},{\"name\":\"672BENIAMEEN .Sales Base Market SectionPeão\"}]}] 

これは木です。ネストされたjson文字列全体をトラバースできる汎用ソリューションが必要です。プロジェクトの途中で立ち往生しています。これを解決するのを手伝ってください。

ありがとう

4

1 に答える 1

1

ListGson が配列を逆シリアル化できるように、クラスに of の子が必要ですchildren。これが実際の例です。

public static void main(String args[]) {
    String str = "[{\"name\":\"3214657890RootSAPSSE\",\"children\":[{\"name\":\"672BENIAMEEN .Sales Base Market SectionCustomer Representative\"},{\"name\":\"672BENIAMEEN .Sales Base Market SectionPeão\"}]}]";
    System.out.println(str);

    Gson gson = new Gson(); 
    java.lang.reflect.Type type = new TypeToken<List<EmployeeJSONObj>>(){}.getType();
    List<EmployeeJSONObj>l = gson.fromJson(str, type);
    System.out.println(l);
}
public static  class EmployeeJSONObj {
    private String name;
    private List<EmployeeJSONObj> children = new LinkedList<>();
    EmployeeJSONObj()
    {

    }
    public String getName()
    {
        return name;
    }

    public String toString() {
        return "name: " + name + ", children = " + children;
    }

}

版画

[{"name":"3214657890RootSAPSSE","children":[{"name":"672BENIAMEEN .Sales Base Market SectionCustomer Representative"},{"name":"672BENIAMEEN .Sales Base Market SectionPeão"}]}]
[name: 3214657890RootSAPSSE, children = [name: 672BENIAMEEN .Sales Base Market SectionCustomer Representative, children = [], name: 672BENIAMEEN .Sales Base Market SectionPeão, children = []]]
于 2013-09-20T12:52:16.523 に答える