Преобразование json

208
20 октября 2021, 14:50

Как разобрать json такого вида:

{
    "firstName": "login",
    "contractData": [
        {
            "contract": "10000555555",
            "contractDate": "28.03.2018"
        }
    ]
} 

запрос pojo щас выглядит так

класс Example

    @SerializedName("firstName")
    @Expose
    public String firstName;
    @SerializedName("contractData")
    @Expose
    public List<ContractDatum> contractData = new ArrayList<ContractDatum>();
    public Example withFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }
    public Example withContractData(List<ContractDatum> contractData) {
        this.contractData = contractData;
        return this;
    }   
}

класс ContractDatum

public class ContractDatum {
    @SerializedName("contract")
    @Expose
    public String contract;
    @SerializedName("contractDate")
    @Expose
    public String contractDate;
    public ContractDatum withContract(String contract) {
        this.contract = contract;
        return this;
    }
    public ContractDatum withContractDate(String contractDate) {
        this.contractDate = contractDate;
        return this;
    }
}

для получения firstName вызываю так

textView.append(example.firstName + "\n");

не понимаю как получить данные по ключам из contractData

Answer 1

Все просто... Использую Gson, lombok, зависимости для градла прилагаю:

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' compileOnly 'org.projectlombok:lombok:1.18.10' annotationProcessor 'org.projectlombok:lombok:1.18.10'

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
public class Main {
    private final static Gson GSON = new GsonBuilder()
        .registerTypeAdapter(LocalDate.class, new LocalDateAdapter())
        .create();
    public static void main(String[] args) {
        String json = "{\n" +
"    \"firstName\": \"login\",\n" +
"    \"contractData\": [\n" +
"        {\n" +
"            \"contract\": \"10000555555\",\n" +
"            \"contractDate\": \"28.03.2018\"\n" +
"        }\n" +
"    ]\n" +
"} ";
        JsonData fromJson = GSON.fromJson(json, JsonData.class);
        System.out.println(fromJson);
        //System.out.println(Long.valueOf(fromJson.getContractData()[0].getContract()));
        //System.out.println(fromJson.getContractData()[0].getContractDate());
    }
}
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateAdapter extends TypeAdapter<LocalDate> {
    @Override
    public void write(final JsonWriter jsonWriter, final LocalDate localDate) throws IOException {
        jsonWriter.value(localDate.toString());
    }
    @Override
    public LocalDate read(final JsonReader jsonReader) throws IOException {
        return LocalDate.parse(jsonReader.nextString(), DateTimeFormatter.ofPattern("dd.MM.yyyy"));
    }
}
@lombok.Data
public class JsonData {
    private String firstName;
    private ContractData[] contractData;
}
import java.time.LocalDate;
@lombok.Data
public class ContractData {    
    private Long contract; 
    private LocalDate contractDate;
}
READ ALSO
Как выполнить несколько INSERT с результатом SELECT?

Как выполнить несколько INSERT с результатом SELECT?

Как добавить несколько строк в таблицу если одно из значений будет полученно из SELECT? В запросе все значения не меняются кроме, product_id

155
@font-face и имя файла из шрифта

@font-face и имя файла из шрифта

Можно ли каким-то образом сделать так, чтобы при добавлении файла шрифта (woff, ttf), имя файла, font-family, бралось из данных самого шрифта (его свойств/метаданных)?

106
Как запустить выполнение gulp?

Как запустить выполнение gulp?

при выполнении команды gulp watch выдает такое

215
Как сделать такую html форму без бутсnрапа?

Как сделать такую html форму без бутсnрапа?

Как сделать такую html форму без бутсnрапа ?

165