java - 使用 Gson 反序列化 JSON

标签 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;
}

最佳答案

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

啊!!好多了!

关于java - 使用 Gson 反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25006431/

相关文章:

java - 从 isValid() 方法调用进一步的 validator ?

javascript - 无法获取 JSON 字符串的元素

json - Kotlin:来自Json的GSON无法计算

java - 如何在Android中使用内部布局?

java - log4j2.xml 文件在 MDC 中设置了 KeyValuePair。如果未设置键,我们如何从日志行中完全省略该值?

java - 生成 WSDL 时删除 Nillable ="true"

java - 从java代码启动RESTful服务器

javascript - 我的 JSON 数据仅填充到一个 ul 元素中,而不是每个 ul 元素中

java - 安卓应用 : Gson crashed when reading List

java - Solr-java错误: class com. Restfb.types.Post声明了多个名为type的JSON字段