1

次のような構造で webService によって返された JSON 文字列を解析する必要があります。

{
"catList" : {
"1" :{
    "name" : "NAME",
    "qty" : "QTY",
    "groupList" : {
        "40" : {
        "name" : "NAME",
        "qty" : "QTY",
        "subjectList" : {
            "1" : {
            "name" : "NAME",
            "qty" : "QTY",
            },
            "5" : {
            "name" : "NAME",
            "qty" : "QTY",
            },
            ...
        },
        "45" : {
        "name" : "NAME",
        "qty" : "QTY",
        "subjectList" : {
            "23" : {
            "name" : "NAME",
            "qty" : "QTY",
            },
            "45" : {
            "name" : "NAME",
            "qty" : "QTY",
            },
            ...
        },
        ...
"2" :{
    "name" : "NAME",
    "qty" : "QTY",
    "groupList" : {
        "142" : {
        "name" : "NAME",
        "qty" : "QTY",
        "subjectList" : {
            "86" : {
            "name" : "NAME",
            "qty" : "QTY",
            },
        "23" : {
        "name" : "NAME",
        "qty" : "QTY",
            },
            ...
        },
        "7" : {
        "name" : "NAME",
        "qty" : "QTY",
        "subjectList" : {
            "98" : {
            "name" : "NAME"
            "qty" : "QTY"
            },
            "08" : {
            "name" : "NAME"
            "qty" : "QTY"
            }
        },
        ...
    },
    ...
"3" :{SAME OTHERS},
"4" :{SAME OTHERS},
"5" :{SAME OTHERS},
"6" :{SAME OTHERS},
"7" :{SAME OTHERS},
"8" :{SAME OTHERS},
"9" :{SAME OTHERS},
}

方法がわからない?! 私はこれらのようないくつかのクラスを持っています:

public class CatList {

    private String name;
    private String qty;
    private JSONObject groupList;
}

public class GroupList {

    private String name;
    private String qty;
    private JSONObject subjectList;
}

public class SubjectList {

    private String name;
    private String qty;
}

しかし、groupLists と subjectList にはランダムなタイトルがあるため、それらを認識する方法がわかりません。これは可能ですか?どのようにできるのか?助けてください

4

6 に答える 6

3

これは悪い設計であるため、サーバーから返される JSON 構造を変更することをお勧めします :)

とにかく、これはJacksonライブラリを使用した私の実例です。サンプル json はここにあります: https://dl.dropbox.com/u/6129677/json_test.json "catList" を削除し、カテゴリのリストを残しただけであることに注意してください (json を参照)。

カテゴリ.java:

public class Category {

    private String name;
    private String qty;
    private Map<String, Group> groupList;

    @JsonProperty("groupList")
    public Map<String, Group> getGroupList() {
        return groupList;
    }

    @JsonProperty("groupList")
    public void setGroupList(Map<String, Group> groupList) {
        this.groupList = groupList;
    }

    @JsonProperty("name")
    public String getName() {
        return name;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("qty")
    public String getQty() {
        return qty;
    }

    @JsonProperty("qty")
    public void setQty(String qty) {
        this.qty = qty;
    }
}

Group.java

public class Group {

    private String name;
    private String qty;

    private Map<String, Subject> subjectList;

    @JsonProperty("name")
    public String getName() {
        return name;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("qty")
    public String getQty() {
        return qty;
    }

    @JsonProperty("qty")
    public void setQty(String qty) {
        this.qty = qty;
    }

    @JsonProperty("subjectList")
    public Map<String, Subject> getSubjectList() {
        return subjectList;
    }

    @JsonProperty("subjectList")
    public void setSubjectList(Map<String, Subject> subjectList) {
        this.subjectList = subjectList;
    }
}

Subject.java

public class Subject {
    private String name;
    private String qty;

    @JsonProperty("name")
    public String getName() {
        return name;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("qty")
    public String getQty() {
        return qty;
    }

    @JsonProperty("qty")
    public void setQty(String qty) {
        this.qty = qty;
    }
}

オブジェクトへの JSON のマーシャリング:

try {
    ObjectMapper om = new ObjectMapper();
    Map<String, Category> catMap = om.readValue(getAssets().open("json_test.json"), new TypeReference<Map<String, Category>>() {
    });
} catch (IOException e) {
    e.printStackTrace();
}

その結果、Map オブジェクトが得られます。

于 2013-01-17T19:52:34.213 に答える
0

プロジェクトでJacksonを使用し、逆シリアル化しようとしているJSONのクラスタイプを作成することをお勧めします。

于 2013-01-17T20:03:44.927 に答える
0

http://json.org/java/プロジェクトをご存知ですか。

私はこのライブラリをWebアプリで使用していますが、あなたの場合に当てはまるかもしれません。

于 2013-01-17T19:50:39.590 に答える
0

そして、JSON オブジェクトの配列を調べて getName() メソッドで名前を取得したら? または、ライブラリhttp://jackson.codehaus.org/を使用しますか?

于 2013-01-17T20:07:15.307 に答える
0

パフォーマンスシンプルさから、jacksonを使用してください。

于 2013-01-17T20:21:39.780 に答える
-1

この回答をここに投稿して、コメントセクションに隠されないようにします。

JSONObject jsonObject = search.getJSONObject("object_key");
Iterator jsonObjectKeys = jsonObject.keys();

while(jsonObjectKeys.hasNext()) {
    String currentDynamicKey = (String)keys.next();
    JSONObject currentDynamicValue = jsonObject.getJSONObject(currentDynamicKey);

    //do what you need to do with the data here
}
于 2013-01-17T20:12:03.683 に答える