繁体   English   中英

使用相同的键字段名称将映射值添加到JSON对象

[英]Add Map Values to a JSON object in identical key field names

我有以下Java Map。 Map<String, String>包含以下值:

876234876, google
mike@hotmail, hotmail
9879892, google

我需要将其转换为以下JSON对象结构,而Java JSON对象不是我的朋友。

"addresses" : [
    { "address":"876234876", "domain":"google" },
    { "address":"mike@hotmail", "domain":"hotmail" },
    { "address":"9879892", "domain":"google" }
]

要创建您要求的JSON,您需要将JSONObject插入JSONArray 因此,为Map<String, String>每个Entry创建一个JSONObject例如{"address": entry.key, "domain": entry.value}并将其添加到JSONArray

让我们使用Stream.map创建该对象,然后将结果直接插入数组中:

public static JSONObject createJson(Map<String, String> value) {
    JSONObject result = new JSONObject();
    JSONArray addresses = new JSONArray();
    result.put("addresses", addresses);

    value.entrySet().stream()       //iterate the map
        .map(e -> {                 //build an object
            JSONObject address = new JSONObject();
            address.put("address", e.getKey());
            address.put("domain", e.getValue());
            return address;
        })
        .forEach(addresses::put);   //insert into the array

    return result;
}

并测试:

public static void main(String[] args) {
    Map<String, String> values = new HashMap<>();
    values.put("876234876", "google");
    values.put("mike@hotmail", "hotmail");
    values.put("9879892", "google");
    System.out.println(createJson(values).toString(4));
}

结果:

{"addresses": [
    {
        "address": "9879892",
        "domain": "google"
    },
    {
        "address": "876234876",
        "domain": "google"
    },
    {
        "address": "mike@hotmail",
        "domain": "hotmail"
    }
]}

使用API​​: Java中的JSON

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

检查此解决方案:

List<String> addresses = new ArrayList<>();
        map.forEach((k, v) -> {
            Map<String, String> nn = new HashMap<>();
            nn.put("address", k);
            nn.put("domain", v);
            addresses.add(JSONValue.toJSONString(nn));
        });
        JSONObject result = new JSONObject(Collections.singletonMap("addresses", new JSONArray(addresses)));

您的JAVA对象应如下所示:

地址清单

@XmlRootElement
public class Foo {

  private List<Address> addresses;

  // Getter, Setter, ...

}

地址

public class Address {

  private String address;

  private String domain;

  // Getters, setters, ...

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM