2015-05-14 536 views
-2

我想解析Java中的JSON字符串。如何解析只有值但没有名称的JSON?

我的JSON输入如下所示:

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

我曾尝试与创建,通过每一个JSON对象,他发现并保存那些符合“ID-”,作为一个新的对象和循环解析器来解决这个下面的“att-”作为新的Objects属性。

你们中的任何一个人都知道是否有更简单的方法?我想将这些信息存储在一个包含“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 

} 
+11

这不是JSON。 JSON在对象语法中不使用“=”字符。 –

+0

你是对的,对不起。无法复制它由于机密信息,所以我只是写下来... :) –

+1

哪里没有名称的属性是? –

回答

1

个人而言,我会做下列之一:

  1. 如果你总是有相同数量和“ID-”值(例如1〜4)的同名然后创建4 POJO字段,id-1,id-2,id-3和id-4。这些字段中的每一个都是包含字段“att-a”和“att-b”的Id类型。然后你只需使用类似杰克逊等的库将JSON解析到POJO中。

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

编辑

通过一些旧的代码看,我最近使用谷歌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(); 

EDIT 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); 
    } 
} 
+0

这是一个非常好的想法,你能否给我一个数字2的例子,因为我并不总是有4个成员 –

+0

在编辑中增加了一些简短的示例代码 - 我现在没有任何关于我的例子可以遍历节点,但希望能帮助你入门 – Matt

+0

如果你想使用Jackson(whic我很喜欢)看看这个页面:http://wiki.fasterxml.com/JacksonInFiveMinutes – Matt

-3

不太清楚的问题,同时也为人们提到有问题,你的JSON,但如何这个 ?

x: <<your stuff>> 

只是带属性名称的前缀?

+1

OP是*解析* JSON ,不生成它 –

+0

add x:试图解析之前 – n00b