我想用Java解析JSON,但是我的JSON看起来像这样:
...
{
"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进行解析,我需要一个带有这样的变量的类(至少我认为是这样):
int 2;
String 3;
据我所知尚无定论。
是否有一种方法(前缀,语法?)实现?还是提取和分配具有正确ID的值的另一种方法?
答案 0 :(得分:0)
您可以使用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
}
上面的代码显示:
Root{totalCount=16, entries=[Entry{id='2009131', two='1788', three='Yes'}, Entry{id='1381', two='956', three='No'}]}
如果您的JSON
是动态的并且可以具有更多/更少的密钥,则可以将其反序列化为Map<String, String>
:
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}]}
答案 1 :(得分:-1)
您可以创建一个对象“条目”,并在其中具有所有可能的变量。有JSON库可以为您完成转换。