将JSONArray转换为List <String>

时间:2019-07-23 21:14:26

标签: java java-stream json-simple

我正在尝试将json文件解析为一组项目,这些项目将字符串列表作为其构造函数的参数。

从json文件中,我正在读取一个包含字符串的数组,如下所示:

{
    "items": [
        {
            "description": [
                "Description line 1",
                "Description line 2",
                "Line 3 and so on..."
            ]
        },
        {
            "description": [
                "Another line",
                "You get the picture",
                "any string will do"
            ]
        }
}

我有一个静态方法,该方法将文件路径作为String并从文件中读取项目。

private static final String ITEMS = "items";

public static Set<Item> getItemsFromFile(String filePath)
{
    try
    {
        JSONObject root = (JSONObject) new JSONParser().parse(new FileReader(filePath));
        Set<Item> items = new HashSet<>();
        for (Object item : (JSONArray) root.get(ITEMS))
        {
            List<String> description = getDescription((JSONObject) item);
            Item temp = new Item(description);
            items.add(temp);
        }
        return items;
    }
    catch (IOException | ParseException e)
    {
        return new HashSet<>();
    }
}

我对getDescription(JSONObject jsonItem)的实现如下:

private static final String DESCRIPTION = "description";

public static List<String> getDescription(JSONObject jsonItem)
{
    if (jsonItem.get(DESCRIPTION) != null)
    {
        return ((JSONArray) jsonItem.get(DESCRIPTION)) // Produces a compiler error
            .stream()                                  // return type should be List<String>
            .map(Object::toString)                     // but is Object
            .collect(Collectors.toList());
    }
    else
    {
        return null;
    }
}

此代码中的Stream产生编译器错误,表示语句的返回类型为List的对象 类型。我想知道为什么这是一个对象而不是列表,并弄清楚应该怎么做才能使我仍然可以使用流。

0 个答案:

没有答案