【问题标题】:How to use ObjectMapper to read in an Json format to an Object which contains String and List<String>如何使用 ObjectMapper 以 Json 格式读取包含 String 和 List<String> 的对象
【发布时间】:2019-04-07 15:22:48
【问题描述】:

我有一个这样的对象:

public class Marketplace {
    private String name;
    private int id;
    private List<String> supportedLanguages;
}

我有一个像这样的输入 Json 格式字符串:

{
"name":"US",
"id":1,
"supportedLanguages":{"en_US", "es_US"}
}

我先尝试了类似的方法但失败了:

objectMapper.readValue(marketplaceInJsonString, Marketplace.class);

然后我尝试了类似的方法但仍然失败:

JsonNode jsonNode = objectMapper.readValue(marketplaceInJsonString, JsonNode.class);

Marketplace marketplace = new Marketplace(jsonNode.get("name").asText()), jsonNode.get("id").asInt(), jsonNode.findValuesAsText("supportedLanguages"));

我认为这里的关键问题是我没有找到将supportedLanguages 映射为字符串列表的正确方法。

Json String 输入有没有格式问题?

请帮忙,非常感谢。

【问题讨论】:

  • 是否可以将"supportedLanguages":{"en_US", "es_US"} 更改为"supportedLanguages":["en_US", "es_US"]?因为 json 无效。

标签: java json list objectmapper


【解决方案1】:

您的 json 字符串是无效的 json
改成

{
  "name": "US",
  "id": 1,
  "supportedLanguages": [
    "en_US",
    "es_US"
  ]
}

测试代码:

String marketplaceInJsonString = "{\"name\":\"US\",\"id\":1,\"supportedLanguages\":[\"en_US\",\"es_US\"]}";
ObjectMapper objectMapper = new ObjectMapper();
Marketplace marketplace = objectMapper.readValue(marketplaceInJsonString, Marketplace.class);
System.out.println(marketplace); 

//输出

Marketplace(name=US, id=1, supportedLanguages=[en_US, es_US])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多