gpt4 book ai didi

java - 将嵌套 json 转换为点符号 json

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:12 24 4
gpt4 key购买 nike

我有一个服务,从那里我得到一个 json 字符串响应,如下所示

{
"id": "123",
"name": "John"
}

我使用 HttpClient 使用其余调用并将 json 字符串转换为 Map<String, String>如下图所示。

String url= "http://www.mocky.io/v2/5979c2f5110000f4029edc93";
HttpClient client = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Content-Type", "application/json");
HttpResponse httpresponse = client.execute(httpGet);
String response = EntityUtils.toString(httpresponse.getEntity());

ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = mapper.readValue(response, new TypeReference<Map<String, String>>(){});

从json字符串到HashMap的转换工作正常,但实际上我的要求是有时在主 json 中可以有一些嵌套的 json,例如在下面的 json 中我有一个额外的 address这又是一个嵌套的 json 键,具有 citytown细节。

{
"id": "123",
"name": "John",
"address": {
"city": "Chennai",
"town": "Guindy"
}
}

如果出现任何嵌套的 json,我需要制作如下所示的 json

{
"id": "123",
"name": "John",
"address.city": "Chennai",
"address.town": "Guindy"
}

目前我正在使用 jackson 库,但可以向任何其他库开放,这将给我开箱即用的功能

任何人都可以对此提出一些建议来帮助我。

最佳答案

这是一个递归方法,可以将具有任意深度的嵌套 Map 展平为所需的点表示法。您可以将它传递给 Jackson 的 ObjectMapper 以获得所需的 json 输出:

@SuppressWarnings("unchecked")
public static Map<String, String> flatMap(String parentKey, Map<String, Object> nestedMap)
{
Map<String, String> flatMap = new HashMap<>();
String prefixKey = parentKey != null ? parentKey + "." : "";
for (Map.Entry<String, Object> entry : nestedMap.entrySet()) {
if (entry.getValue() instanceof String) {
flatMap.put(prefixKey + entry.getKey(), (String)entry.getValue());
}
if (entry.getValue() instanceof Map) {
flatMap.putAll(flatMap(prefixKey + entry.getKey(), (Map<String, Object>)entry.getValue()));
}
}
return flatMap;
}

用法:

mapper.writeValue(System.out, flatMap(null, nestedMap));

关于java - 将嵌套 json 转换为点符号 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45349516/

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