我正在处理一些JSON转换为POJO,而我正在收到响应的服务器正在发送这样的JSON:
"Availability":{
"StatusCode":"A",
"BreakDown":{
"2017-10-27":"A"
}
}
如何保存("2017-10-27":"A"
)?它随着我的每个请求而变化,所以它应该是动态的!它甚至可能吗?
答案 0 :(得分:0)
如果您要使用当前表示为"2017-10-27":"A"
的值,则必须知道它在变量"BreakDown"
中保留。因此,您需要使用jsonPath:$.Availability.BreakDown
查询此变量。
它将提供此JSON对象:
{"2017-10-27":"A"}
希望它能回答你的问题
答案 1 :(得分:0)
第一个答案非常准确但是提取密钥和值而不直接引用是目标,因为它们是动态的。
var x = obj.Availability.Breakdown;
for(var key in x){
console.log(key);
console.log(x[key]);
}
通过这种方式,您可以获得密钥和值,并根据需要使用它。 另外,如果var x中有多个键值对,那么也可以通过此循环访问它们。
答案 2 :(得分:0)
假设“应该是动态的”,你的意思是你想要保存的内容(BreakDown中的内容)可能会改变(甚至是类型)每个请求并假设你的例子json是:
<强> Test.json: 强>
{
"StatusCode":"A",
"BreakDown":{
"2017-10-27":"A"
}
}
您可以使用Gson库来获取所需的信息。因为每个类都有Object作为超类,所以可以将json反序列化为Map<Object, Object>
。
public static void main(String args[]) {
Gson gson = new Gson();
Map<Object, Object> breakDown=null;
String filename="/.../Test.json";
JsonReader reader = null;
try {
reader = new JsonReader(new FileReader(filename));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
final Type type = new TypeToken<Map<Object,Object>>() {}.getType();
Map <Object,Object> conv= gson.fromJson(reader, type);
for (Map.Entry<Object, Object> entry : conv.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
if(entry.getKey().equals("BreakDown"))
{
breakDown= (Map<Object, Object>) entry.getValue();
}
}
if(breakDown!=null){
Map.Entry first= breakDown.entrySet().iterator().next();
System.out.println(first.getKey());
System.out.println(first.getValue());
}
}
Map<Object, Object> breakDown
地图也是对象,因为我假设键和值可能与您发布的示例不同。否则,如果密钥始终是日期而值是字符串,则可以将其定义为Map<Date, String> breakDown
。