如何将Map转换为javax.json.JsonObject?

时间:2019-09-22 02:45:37

标签: java lambda javax.json

我可以这样做:

Map<String, String> mapA = ...;
Map<String, String> mapB = mapA.entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue
    ));

但是当我尝试这样做时:

... mapA.entrySet().stream()
    .collect(JsonCollectors.toJsonObject(
        JsonObject.Entry::getKey,
        JsonObject.Entry::getValue
    ));

我明白了

  

不能从静态上下文中引用非静态方法

JsonObject.Entry::getKey, JsonObject.Entry::getValue部分。

那是为什么?

3 个答案:

答案 0 :(得分:1)

您可以使用add method of JsonObjectBuilder

JsonObjectBuilder builder = Json.createObjectBuilder();
mapA.forEach(builder::add);
JsonObject obj = builder.build();

答案 1 :(得分:1)

javax.json.JsonObjectMap<String,JsonValue>的子类,因此具有putAll方法

void putAll(Map<? extends K,? extends V> m)

因此,您只需创建JsonObject并添加Map

JsonObject object = Json.createObjectBuilder().build();
object.putAll(mapA);

答案 2 :(得分:0)

使用org.json代替javax.json

// Create a JSON object directly from your map
JSONObject obj = new JSONObject( srcmap );
// Convert it into string
String data = obj.toString();