gpt4 book ai didi

java - 使用 JsonArray 和 HashMap 解析 JSON

转载 作者:行者123 更新时间:2023-11-30 05:26:00 25 4
gpt4 key购买 nike

我需要解析以下 JSON 并将其中的值添加到三个不同的 Java 对象中。我正在考虑形成其他 3 个 Json 来做到这一点。我在解析时遇到一些问题,因为 JSON 有点复杂。 JSON 如下:

{
"totalCount": 1,
"results": [
{
"teleCommunications": [
{
"areaCode": "100",
"telephoneNumber": "300-2444",
"internationalAreaCode": "",
"communicationType": 1
},
{
"areaCode": "100",
"telephoneNumber": "200-2555",
"internationalAreaCode": "",
"communicationType": 5
}
],
"delegate": {
"id": 0,
"range": 0,
},
"name": "Andrew",
"composedKey": {
"id": 615,
"range": 50,
},
"isBranchAddress": false,
"emailAddresses": [
{
"emailAddressType": 9,
"emailAddress": "andrew.brown@gmail.com"
}
],
"name": "Brown",
"zipCodeCity": "65760 Leipzig",
"salutation": "Mr.",
"openingDate": "2019-09-20",
"streetHouseNumber": "Offenbach. 37",
"modificationTimestamp": "2018-01-27"
}
]
}

我需要分别获取 JSON 中的 name、zipCodeCity、salutation、openingDate、streetHouseNumber 中的值(或任何其他方式)、不同 JSON 中的 emailAddresses 以及另一个 JSON 中的其他数据。

我尝试了这段代码:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
HashMap<String, Object> result = new ObjectMapper().readValue(response, HashMap.class);

Object object = result.get("results");


List<HashMap<String, String>> jsonValues = (List<HashMap<String, String>>)object;

for(String key : jsonValues.get(0).keySet()){

System.out.println("name value " + jsonValues.get(0).get("name"));
System.out.println("zip code City " + jsonValues.get(0).get("zipCodeCity"));

}

问题是我不会采用这种硬编码的方式......它不是很合适。有谁知道更好的方法来存储我需要的值并更优化地解析 Json?

谢谢

最佳答案

寻找此链接,有一个专门为您准备的演示应用程序:https://github.com/nalmelune/jackson-demo-58591850 (查看JacksonTest)

首先,您需要用于表示结构的数据类(或所谓的dto)。您可以使用在线生成器(google“json to java dto online”)或自己制作。例如,这是根对象(有关更多信息,请参阅 github 链接):

public class Root {
private int totalCount;
private List<Results> results;

public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}

public int getTotalCount() {
return this.totalCount;
}

public void setResults(List<Results> results) {
this.results = results;
}

public List<Results> getResults() {
return this.results;
}
}

然后配置您的 ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

并使用它(不要创建新的映射器,就像您的示例中那样):

Root result = mapper.readValue(response, Root.class);

最后,您可以像往常一样访问它:普通旧 Java 对象:

    for (Results resultItem : result.getResults()) {
System.out.println(resultItem.getSalutation());
System.out.println(resultItem.getName());
System.out.println(resultItem.getZipCodeCity());
System.out.println(resultItem.getOpeningDate());
System.out.println(resultItem.getStreetHouseNumber());
}

为了使其正常工作,请确保验证您的 json(“range”后面有无效的逗号,“name”出现两次等等,它已在 github 上修复)。并确保通过添加 com.fasterxml.jackson.datatype:jackson-datatype-jsr310 模块将 jsr310 包含在类路径中。对于 LocalDateLocalDateTime 对象,您将需要它。

关于java - 使用 JsonArray 和 HashMap 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com