JSON数组中的不同对象

时间:2014-07-15 05:16:05

标签: java json gson

目前我正在努力了解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"
 }
 }
 }

感谢您的帮助!

2 个答案:

答案 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")