Java 是否可以将字符串/int声明为numer?
我想用Java解析JSON,但我的JSON看起来是这样的:Java 是否可以将字符串/int声明为numer?,java,json,string,gson,declaration,Java,Json,String,Gson,Declaration,我想用Java解析JSON,但我的JSON看起来是这样的: ... { "total_count": 16, "entries": [ { "2": "1788", "3": "Yes", "id": "2009131" }, { "2": "956", "3": "No", "id
...
{
"total_count": 16,
"entries": [
{
"2": "1788",
"3": "Yes",
"id": "2009131"
},
{
"2": "956",
"3": "No",
"id": "1381"
}
...
我已经找到了通过以下方式“提取”条目的方法:
if(jsonTree.isJsonObject()){
System.out.println("True");
JsonObject jsonObject = jsonTree.getAsJsonObject();
JsonElement f2 = jsonObject.get("entries");
现在我有了一个JSON数组。对于使用gson进行解析,我需要一个包含如下变量的类(至少我认为是这样):
据我所知,这是不可声明的
有没有一种方法(前缀、语法?)可以实现?或者用另一种方法提取并分配具有正确id的值?您可以创建一个对象“条目”,并在其中包含所有可能的变量。有一些JSON库可以为您进行转换。您可以使用
SerializedName
注释,该注释允许在Java
文件中定义不同于属性名的字段名。下面您可以看到如何将JSON
负载反序列化到Java
模型的示例:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.io.File;
import java.io.FileReader;
import java.util.List;
public class GsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Root root = gson.fromJson(new FileReader(jsonFile), Root.class);
System.out.println(root);
}
}
class Root {
@SerializedName("total_count")
private int totalCount;
private List<Entry> entries;
// getters, setters, toString
}
class Entry {
private String id;
@SerializedName("2")
private String two;
@SerializedName("3")
private String three;
// getters, setters, toString
}
如果您的JSON
是动态的,并且可以有更多/更少的键,那么您可以将其反序列化到Map
:
您可能正在查找
@SerializedName
。另一个副本的可能副本:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.io.File;
import java.io.FileReader;
import java.util.List;
public class GsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Root root = gson.fromJson(new FileReader(jsonFile), Root.class);
System.out.println(root);
}
}
class Root {
@SerializedName("total_count")
private int totalCount;
private List<Entry> entries;
// getters, setters, toString
}
class Entry {
private String id;
@SerializedName("2")
private String two;
@SerializedName("3")
private String three;
// getters, setters, toString
}
Root{totalCount=16, entries=[Entry{id='2009131', two='1788', three='Yes'}, Entry{id='1381', two='956', three='No'}]}
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.io.File;
import java.io.FileReader;
import java.util.List;
import java.util.Map;
public class GsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Root root = gson.fromJson(new FileReader(jsonFile), Root.class);
System.out.println(root);
}
}
class Root {
@SerializedName("total_count")
private int totalCount;
private List<Map<String, String>> entries;
// getters, setters, toString
}
Root{totalCount=16, entries=[{2=1788, 3=Yes, id=2009131}, {2=956, 3=No, id=1381}]}