使用Gson反序列化JSON

时间:2014-07-29 00:24:35

标签: java json gson deserialization

我从服务器收到一个类似于以下语法的JSON,我需要一些帮助反序列化&解析它。我已经做了很多阅读,并发现使用GSON非常有用! (我会在这里发布我的代码的任何更新)

(更正了JSON):

    [{
    "name" : "Zone1",
    "types" : [{"datatype":"string","brand":"string","index":0},
            {"datatype":"string","value":"int32,"index":1},
            {"datatype":"string","url":"string,"index":2}]
    "data" : [["gucci",2,"www.whoami12345.com"]]
   },
   {
   "name" : "Zone2",
   "types" : [{"datatype":"string","brand":"string","index":0},
            {"datatype":"string","value":"int32,"index":1},
            {"datatype":"string","url":"string,"index":2}]
   "data" : [["nike", 23,"www.nike.com"]]
  }]

我发现这个网站Link非常整洁,因为它解释了如何使用gson并很好地解释了反序列化。我对JSON的理解是它是一个数组,数据字段是一个数组数组。

我的问题是如何解析这个问题?我有一个函数,它将采用字符串搜索特定的区域名称。在反序列化发生并且条目与正确的区域匹配之后,应该返回数据类型和URL。从那篇文章中,我的理解是我应该使用JSONArray。对于任何反馈,我们都表示感谢。以下是我开始的一些代码

import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;

String name;    

public class data{
    String brand;
    int num;
    int url;
 }

public class types{
    String datatype;
    int value;
    String url;
}


public types Deserialiser(String json, String zone){ // this is the json string that will be passed into the function


JsonObject jsonObject = json.getAsJsonObject();
JsonArray jsonArray = jsonObject.getAsJsonArray();
int index = -1;
for (int i = 0; i<jsonArray.size();i++){
   String temp = jsonArray.get(i).get("name");
   if (temp.equals(zone){
      index =i;
      break;
   }

}

....

types jsonTypes = new types();
// set everything else
return jsonTypes;
}

1 个答案:

答案 0 :(得分:1)

有效的JSON(我认为):

[{"name"  : "Zone1",
   "types" : ["datatype":"string","value":"int","url":"string"],
   "data"  : [["gucci",2,"www.whoami12345.com"]]},
  {"name"  : "Zone2",
   "types" : ["datatype":"string","value":"int","url":"string"],
   "data"  : [["nike", 23,"www.nike.com"]]}
]

没有 - 错过了“对象”括号

再试一次:

[{"name"  : "Zone1",
   "types" : [{"datatype":"string","value":"int","url":"string"}],
   "data"  : [["gucci",2,"www.whoami12345.com"]]},
  {"name"  : "Zone2",
   "types" : [{"datatype":"string","value":"int","url":"string"}],
   "data"  : [["nike", 23,"www.nike.com"]]}
]

阿!!好多了!