JSON参数就像我所看到的一样

时间:2018-03-24 09:38:10

标签: java json

我正在处理一些JSON转换为POJO,而我正在收到响应的服务器正在发送这样的JSON:

"Availability":{
                "StatusCode":"A",
                "BreakDown":{
                            "2017-10-27":"A"
                            }
               }

如何保存("2017-10-27":"A")?它随着我的每个请求而变化,所以它应该是动态的!它甚至可能吗?

3 个答案:

答案 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