繁体   English   中英

使用Gson对JSON进行反序列化

[英]Deserialization of a JSON using Gson

我正在从服务器接收类似于以下语法的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的理解是它是一个数组,而数据字段是一个Arrays数组。

我的问题是我该如何解析? 我有一个函数,它将使用字符串搜索特定的区域名称。 反序列化发生并且条目匹配正确的区域后,应该返回数据类型和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;
}

有效的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"]]}
]

啊!! 好多了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM