Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以将字符串/int声明为numer?_Java_Json_String_Gson_Declaration - Fatal编程技术网

Java 是否可以将字符串/int声明为numer?

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

我想用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进行解析,我需要一个包含如下变量的类(至少我认为是这样):

据我所知,这是不可声明的


有没有一种方法(前缀、语法?)可以实现?或者用另一种方法提取并分配具有正确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}]}