我试图使用json.simple从这个json文件中获取内容:
"Main": {
"Part1":{
"Length": 2,
"Flags": 2,
"Sequence": 4
},
"Part2":{
"Length": 2,
"Type":2,
"Main_Dest":4,
"Main_Source":4,
"Sequence":4,
"Data": {
"1":12,
"2":24
},
"Blank": 8
}
}
基本上,我想要达到" Type" Part2中的值,并在路上添加所有值。最后的含义我想得到总和10(长度+标志+序列+长度)和数字2为值"输入"。我的主要问题是我必须一般地这样做,所以我不能只是按名称收集值,因为它们可能会改变或者可以添加其他值。只有价值" Type"将永远被称为。
到目前为止,我所做的是:
private static void parseJson() {
String path = "...config.json";
boolean count = false;
int sum = 0;
try {
FileReader reader = new FileReader(path);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
jsonObject.entrySet();
JSONObject main = (JSONObject) jsonObject.get("Main");
for (Iterator iterator = main.keySet().iterator(); iterator.hasNext();){
String key = (String) iterator.next();
//this is where I'm stumped. Do I keep going into the JSONObject until I get to a value?
if (count){
sum += (int) sahara.get(key);
}
if (key.equals("Type")){
count = true;
}
}
System.out.println(skip);
} catch (Exception e) {
}
}
显然,我真的不知道自己在做什么。如何迭代json文件中的最低级别?
作为一个小问题,如果我可以出售我的软件,我应该使用哪些Json解析器库?换句话说,哪个不会导致许可问题?
答案 0 :(得分:2)
您可以递归迭代键,但无法计算总和,结果将无法预测。
jsonObject.keySet不保证以与文件中出现的顺序相同的顺序返回密钥。
答案 1 :(得分:1)
我添加了缺少的大括号来修复您的输入。
{
"Main": {
"Part1":{
"Length": 2,
"Flags": 2,
"Sequence": 4
},
"Part2":{
"Length": 2,
"Type":2,
"Main_Dest":4,
"Main_Source":4,
"Sequence":4,
"Data": {
"1":12,
"2":24
},
"Blank": 8
}
}
}
此示例显示了如何使用流API。
// -*- compile-command: "javac -cp javax.json-1.0.jar q43737601.java && java -cp .:javax.json-1.0.jar q43737601"; -*-
import java.io.FileReader;
import javax.json.Json;
import javax.json.stream.JsonParser;
class q43737601
{
public static void main (String argv[]) throws Exception
{
String path = "config.json";
int sum = 0;
JsonParser p = Json.createParser (new FileReader (path));
while (p.hasNext()) {
JsonParser.Event e = p.next();
switch (e) {
case VALUE_NUMBER:
sum += Integer.parseInt(p.getString());
break;
case KEY_NAME:
if ("Type".equals(p.getString()))
System.out.println(sum);
break;
}
}
}
}
如果你运行它,它会显示10.该例子将所有数字加起来直到名为“Type”的键。
我用OpenJDK尝试了上面的例子。有必要按照this回答中解释的步骤进行操作。我必须在编译命令中设置类路径(-cp
)。