我正在尝试用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
}
答案 0 :(得分:1)
我个人会做以下其中一项:
如果您将始终使用相同的数字和相同的名称" id - "值(例如1到4)然后创建一个包含4个字段的POJO,id-1,id-2,id-3和id-4。这些字段中的每一个都是Id类型,其中包含字段" att-a"和" att-b"。然后,您只需使用像jackson等库那样将JSON解析到您的POJO中。
获取根内容作为JSON对象(再次使用jackson或类似的库),并遍历对象的子对象(您可以在每个子对象上使用getFirstChild然后使用nextSibling)并将每个条目添加到您选择使用的任何对象的列表
修改强>
查看一些旧代码,我最近使用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>>
只是使用属性名称前缀?