0

假设我有一个名为 myJson 的 GenericJson var,其中包含这样的 Json 消息:

{
  "id": "1234567890",
  "media": [{"id": "...", "url": "..."}, {"id": "...", "url": "..."}],
  "related_object": {"id": "...", "name": "..."}
}

如果我想获得“id”值,我只需写:

String myId = (String) myJson.get("id").

但是,如果我想获取嵌套内容中的值怎么办?

我试过:

GenericJson[] myMedia = myJson.get("media");
GenericJson[] myMedia = (GenericJson[]) myJson.get("media");

但似乎不喜欢选角。

尝试使用 ArrayList 并有效。

ArrayList<GenericJson> myMediaList = (ArrayList<GenericJson>) myJson.get("media");

但那时我不能从 ArrayList 中取出任何东西......我尝试过类似的东西:

GenericJson[] myMedia = myMediaList.toArray();
GenericJson[] myMedia = (GenericJson[]) myMediaList.toArray();

甚至像

GenericJson myFirstMedia = myMediaList.get(0);
GenericJson myFirstMedia = (GenericJson) myMediaList.get(0);

但不想工作......即使它是 GenericJson 对象的 ArrayList,也没有。

我应该怎么办?有没有解决的办法?

4

2 回答 2

2

您正在序列化/反序列化的对象是 ParameterizedType (即包含至少一个类型参数并且可能是数组),那么您必须使用 toJson(Object, Type) 或 fromJson(String, Type) 方法。下面是一个序列化和反序列化 ParameterizedType 的示例:

Type listType = new TypeToken<LinkedList>() {}.getType();
List target = new LinkedList();
target.add("blah");

Gson gson = new Gson();
String json = gson.toJson(target, listType);
List target2 = gson.fromJson(json, listType);

知道

Type typeOfCollectionOfFoo = new TypeToken<Collection<Foo>>(){}.getType() 
于 2013-08-24T12:31:24.497 回答
1

我已经写了这个函数来动态读取 jsonobject 试试这个

private void parseJson(JSONObject data) {

        if (data != null) {
            Iterator<String> it = data.keys();
            while (it.hasNext()) {
                String key = it.next();

                try {
                    if (data.get(key) instanceof JSONArray) {
                        JSONArray arry = data.getJSONArray(key);
                        int size = arry.length();
                        for (int i = 0; i < size; i++) {
                            parseJson(arry.getJSONObject(i));
                        }
                    } else if (data.get(key) instanceof JSONObject) {
                        parseJson(data.getJSONObject(key));
                    } else {
                        System.out.println("" + key + " : " + data.optString(key));
                    }
                } catch (Throwable e) {
                    System.out.println("" + key + " : " + data.optString(key));
                    e.printStackTrace();

                }
            }
        }
    }
于 2013-08-24T12:33:03.270 回答