Можно ли объявить строку / int как число? - PullRequest
0 голосов
/ 30 мая 2019

Я хочу проанализировать JSON в Java, но мой 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");

Теперь я 'VE массив JSON.Для парсинга с помощью gson мне понадобится класс с такими переменными (по крайней мере, я так думаю):

int 2;
String 3;

, насколько я знаю, не подлежит объявлению.

Есть ли способ (префикс, синтаксис?) Реализовать в любом случае?Или другой способ извлечь и присвоить значения с правильным идентификатором?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Вы можете использовать аннотацию 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}]}
0 голосов
/ 30 мая 2019

Вы можете создать объект «Записи» и иметь там все возможные переменные. Существуют библиотеки JSON, которые могут выполнить преобразование за вас.

...