目前我正在努力了解json及其运作方式。 但我对对象数组有问题。 数组中的所有对象都有一个名为“value”的键(我知道这很奇怪,这不是我的代码)什么也是对象。 现在问题是:这个名为“value”的对象总是有不同的键值。 所以我现在不知道如何将json代码解析为java对象代码,每次都不同。
这里有一些例子:
数组的第一个对象:
"value":
{
"local":
[
"English", "Deutsch", Espanol"
],
"english":
[
"English", "Deutsch", Espanol"
],
},
数组的第二个对象(现在是字符串,而不是对象):
"value" : "",
数组的第三个对象:
"value" : {},
...
也许我正在解析错误。 首先,我在java中为json代码创建了bean类,然后我使用了google的自动解析器。 (GSON) 当只有上面的一个示例在json代码中时,它才有效。 (它应该没有区别,比如从字符串变为对象......)
Gson gson = new Gson();
Output output = gson.fromJson(json, Output.class);
输出是json东西的主要类。
我发现可能在解析时我可以先检查一个名为“id”的值,然后从中我可以使用正确的变量创建另一个bean类...
这是我需要解析为java对象的代码,你是怎么做到的? 问题是被称为“价值”的关键,因为它总是不同的。 使用我的方法使用谷歌解析器“gson”它不会工作,因为我得到一个异常,它的字符串,但我正在等待一个对象......
{
"status":"success",
"data":{
"panel":{
"title":{
"label":{ "local":"Tote Selection", "english":"Tote Selection" },
"image":"public/img/pick.jpg", "type":"default"
},
"isFirst":false, // currently not used
"isLast":false, // currently not used
"ownCount":0, // currently not used
"panelsCount":0, // currently not used
"elements":[
{
"type":"text",
"id":"1", "value":{ "local":"Scan next order tote",
"english":"Scan next order tote" },
"label":{ "local":"", "english":"" }, "color":"000000",
"fontsize":18, "fontstyle":"flat", "alignment":"left",
"rows":"undefined", "bgcolor":"", "isFocus":false
},
{
"type":"text",
"id":"4", "value":{ "local":"Scan tote: ", "english":"Scan tote: " },
"label":{ "local":"", "english":"" }, "color":"000000", "fontsize":20,
"fontstyle":"strong", "alignment":"left", "rows":"undefined",
"bgcolor":"", "isFocus":false
},
{
"type":"input",
"id":"6", "value":"", "label":{ "local":"", "english":"" },
"color":"000000", "fontsize":24, "fontstyle":"flat", "alignment":"left",
"rows":"undefined", "isFocus":true
},
{
"type":"button",
"id":"1", "value":{ "local":"", "english":"" },
"label":{ "local":"Menu", "english":"Menu" }, "color":"000000",
"fontsize":14, "fontstyle":"strong", "alignment":"left",
"rows":"undefined", "isFocus":false
},
{
"type":"button",
"id":"4", "value":{ "local":"", "english":"" },
"label":{ "local":"Enter", "english":"Enter" }, "color":"000000",
"fontsize":14, "fontstyle":"strong", "alignment":"right",18
"rows":"undefined", "isFocus":false
}
]
},
"authToken":"0fdd440a-619f-4936-ab74-d189accb5bd9",
"routing":{
"controller":"panel",
"action":"process",
"workflowId":"singlepicking",
"taskId":"orderSelection"
}
}
}
感谢您的帮助!
答案 0 :(得分:1)
看起来有点不同,但你的回答对我有帮助! THX
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(br).getAsJsonObject();
//now getting all the json values
String status = obj.get("status").getAsString();
JsonObject data = obj.getAsJsonObject("data");
String authToken = data.get("authToken").getAsString();
JsonObject routing = data.getAsJsonObject("routing");
String controller = routing.get("controller").getAsString();
String action = routing.get("action").getAsString();
String workflowId = routing.get("taskId").getAsString();
答案 1 :(得分:0)
如果我理解你的问题,你可以检索JSONArray的值,如下所示
for (int i = 0; i < JArray.length(); i++) {
print(JArray.getJSONObject(i).tostring())
}
所以,如果我是对的你是从字符串第一个获得JSON?所以请在下面尝试首先将JSONObject中的String存储为JSONObject obj = new JSONObject(str);//str is the string that u are getting
获取data-panel-tittle-label中的valueenglish是
String englishinLable=obj .getJSONObject("data").getJSONObject("panel").getJSONObject("title").getJSONObject("label").optString("english")