如何解析只有值但没有名称的JSON?

时间:2015-05-14 13:47:52

标签: java json

我正在尝试用Java解析JSON字符串。

我的JSON输入如下所示:

{
  "id-1": {
            "att-a":5,
            "att-b":3
          },
  "id-2": {
            "att-a":5,
            "att-b":3
          }
}

我试图通过创建一个解析器来解决这个问题,该解析器循环遍历他找到的每个JSON对象,并将那些与“id-”匹配的解析器存储为新的Object,并将以下“att-”存储为新的Objects属性。

你们中是否有人知道是否有更简单的方法?

€:我想将这些信息存储在一个Object中,该变量包含一个名为'id'的字符串变量,该变量包含“id- ..”字符串。 'att-'变量不是问题。

€2:我不知道每次查询服务器时会得到多少“id- ..”对象。

€3:这是我想要从JSON创建的Java对象:

public class Data {
    private String id;

    private String att_a;

    private String att_b;

    // Constructor

    //Setters and Getters

}

2 个答案:

答案 0 :(得分:1)

我个人会做以下其中一项:

  1. 如果您将始终使用相同的数字和相同的名称" id - "值(例如1到4)然后创建一个包含4个字段的POJO,id-1,id-2,id-3和id-4。这些字段中的每一个都是Id类型,其中包含字段" att-a"和" att-b"。然后,您只需使用像jackson等库那样将JSON解析到您的POJO中。

  2. 获取根内容作为JSON对象(再次使用jackson或类似的库),并遍历对象的子对象(您可以在每个子对象上使用getFirstChild然后使用nextSibling)并将每个条目添加到您选择使用的任何对象的列表

  3. 修改

    查看一些旧代码,我最近使用Google Gson进行解析。最简单的形式:

    String json = // insert your code here that gets your JSON as a string
    
    JsonParser jp = new JsonParser();
    JsonElement parsed = jp.parse(json);
    

    然后其中一个应该有效:

    JsonObject obj = parsed.getAsJsonObject();
    // OR
    JsonPrimitive prim = parsed.getAsJsonPrimitive();
    

    编辑2

    我只是把它扔在一起 - 你可能想要整理它等但是应该给你一个想法:

    public void test1() {
        String json = "{ \"id-1\": { \"att-a\":5, \"att-b\":3 }, \"id-2\": { \"att-a\":5, \"att-b\":3 } }";
        InputStream is = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
    
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = null;
        try {
            rootNode = mapper.readValue(is, JsonNode.class);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    
        int i = 1;
        while(rootNode.get("id-" + i) != null) {
            JsonNode myNode = rootNode.get("id-" + i);
            // DO LOGIC WITH YOUR NODE HERE
            i++;
            System.out.println(myNode);
        }
    }
    

答案 1 :(得分:-3)

对问题不太确定,也有人提到你的JSON有问题,但这样做怎么样?

x: <<your stuff>> 

只是使用属性名称前缀?