Java 字段名未知时解析jsonObject

Java 字段名未知时解析jsonObject,java,json,gson,jsonobject,Java,Json,Gson,Jsonobject,我试图从JsonObject中提取一些数据。 问题是json中的字段具有不可预测的名称 我如何提取具有这种奇怪字段名的信息 JsonObject jsonObject= myObjectJsonObject.getAsJsonObject("???"); 以下是一个例子: "myObject":{ "216cfa89a2de57554b36b177f0bfbb05":{ }, "0cf9182b5ceba2cb

我试图从JsonObject中提取一些数据。 问题是json中的字段具有不可预测的名称

我如何提取具有这种奇怪字段名的信息

JsonObject jsonObject= myObjectJsonObject.getAsJsonObject("???");    
以下是一个例子:

 "myObject":{  
          "216cfa89a2de57554b36b177f0bfbb05":{  

           },
           "0cf9182b5ceba2cb64174141a13e647d":{  

           },
           "eb1d1b19e117ba1387a798d9194b4660":{  

           },
           "157b52871e8e560c7ec0be111ef02363":{  

           },
           "4db69dd3a8ae8e0089bd2959ab0c5f86":{  

           },
}
我使用的是gson,这里有getAsJsonObject方法,但是如果我不知道字段名,我怎么能使用它呢

JsonObject jsonObject= myObjectJsonObject.getAsJsonObject("???");    
此外,字段的数量也可能是可变的,这也是一个问题。 我想知道为什么我没有得到一个jsonArray作为响应,它会更合适,我可以用这种方式解析它。

如果你看了这篇文章,你会发现你可以简单地做到:

Object o=new Gson().fromJson(json,Object.class)

返回的对象是字符串的映射,可以是字符串,也可以是映射。

如果您查看post,您可以简单地执行以下操作:

Object o=new Gson().fromJson(json,Object.class)


返回的对象是字符串的映射,可以是字符串,也可以是映射。

在您的示例中,最好使用它

使用JSON,如下所示:

{
  "myObject": {
    "216cfa89a2de57554b36b177f0bfbb05": {
      "field1": true
    },
    "0cf9182b5ceba2cb64174141a13e647d": {
      "field2": true
    },
    "eb1d1b19e117ba1387a798d9194b4660": {
      "field3": true
    },
    "157b52871e8e560c7ec0be111ef02363": {
      "field2": true
    },
    "4db69dd3a8ae8e0089bd2959ab0c5f86": {
      "field5": true
    }
  }
}
和JsonPth的一个表达式

$.myObject.*
您将得到一个字段数组

[
  {
    "field1": true
  },
  {
    "field2": true
  },
  {
    "field3": true
  },
  {
    "field2": true
  },
  {
    "field5": true
  }
]

希望有帮助:)

在您的情况下,它更适合使用

使用JSON,如下所示:

{
  "myObject": {
    "216cfa89a2de57554b36b177f0bfbb05": {
      "field1": true
    },
    "0cf9182b5ceba2cb64174141a13e647d": {
      "field2": true
    },
    "eb1d1b19e117ba1387a798d9194b4660": {
      "field3": true
    },
    "157b52871e8e560c7ec0be111ef02363": {
      "field2": true
    },
    "4db69dd3a8ae8e0089bd2959ab0c5f86": {
      "field5": true
    }
  }
}
和JsonPth的一个表达式

$.myObject.*
您将得到一个字段数组

[
  {
    "field1": true
  },
  {
    "field2": true
  },
  {
    "field3": true
  },
  {
    "field2": true
  },
  {
    "field5": true
  }
]
希望有帮助:)

使用

String json=“{'abcd':{'a':'d'},'dcba':{'d':'a'}”;
JsonObject o=newJSONParser().parse(json).getAsJsonObject();
for(Map.Entry:o.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
或者,您可以在加载对象时获得贴图:

    Map<String, JsonObject> map = new Gson().fromJson(json, new TypeToken<Map<String, JsonObject>>(){}.getType());
    for(Map.Entry e : map.entrySet()) {
        System.out.println(e.getKey());
        System.out.println(e.getValue());
    }
}
Map Map=new Gson().fromJson(json,new TypeToken(){}.getType());
对于(Map.Entry e:Map.entrySet()){
System.out.println(e.getKey());
System.out.println(e.getValue());
}
}
或者,您可以添加一个可以将类反序列化为合理的对象(可能是映射)

使用

String json=“{'abcd':{'a':'d'},'dcba':{'d':'a'}”;
JsonObject o=newJSONParser().parse(json).getAsJsonObject();
for(Map.Entry:o.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
或者,您可以在加载对象时获得贴图:

    Map<String, JsonObject> map = new Gson().fromJson(json, new TypeToken<Map<String, JsonObject>>(){}.getType());
    for(Map.Entry e : map.entrySet()) {
        System.out.println(e.getKey());
        System.out.println(e.getValue());
    }
}
Map Map=new Gson().fromJson(json,new TypeToken(){}.getType());
对于(Map.Entry e:Map.entrySet()){
System.out.println(e.getKey());
System.out.println(e.getValue());
}
}

或者,您可以添加一个可以将类反序列化为合理的对象(可能是映射)

myObject
是否不变?它的内容会发生变化,字段的名称及其编号也会发生变化。您可以将其解析为一个
Map
。我的意思是名称
myObject
是否会发生变化?不,名称不会发生变化是
myObject
是否不变?它的内容会发生变化,字段的名称及其编号是可变的,您可以将其解析为
映射
。我的意思是名称
myObject
是否更改?不,名称没有更改,而此代码块可以回答OP的问题,如果你解释这个代码是如何和为什么不同于问题中的代码,以及为什么不引入其他的方法来解决这个问题,那么这个答案会更有用。请考虑编辑你的帖子来添加更多关于你的代码所做的解释以及为什么它会解决这个问题的解释。大多数情况下只包含代码的答案(即使有效)通常不会帮助OP理解他们的问题。虽然此代码块可能会回答OP的问题,但如果您解释此代码与问题中的代码的不同方式和原因,此答案会更有用,为什么不解决其他问题就解决了这个问题。请考虑编辑你的帖子,以进一步解释你的代码所做的以及为什么它会解决这个问题。一个只包含代码的答案(即使它在工作)通常不会帮助OP理解他们的问题。