从Json文件阅读数据并将数据复制到列表中[已关闭]

2guxujil  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(119)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
1小时前关闭。
Improve this question
我想从一个json文件中读取如下内容:

{
   "name": "Luis Lopez",
   "name": "Armando Guascogne Ursular",
   "name": "Brancar Diego"
}

从json文件中读取并将名称复制到数组列表中。

public List getName() {
        try {
            Object obj = parser.parse(new FileReader("mypath\name.json"));
            JSONObject jsonObject = (JSONObject) obj;
            String name = (String) jsonObject.get("name");
            for (int i = 0; i<jsonObject.length();i++){
                datasource.add(name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return datasource;
}

但它返回给我的是空列表。

sqserrrh

sqserrrh1#

首先,你的JSON是无效的,因为你使用了相同的键name三次,这将在任何情况下只给予你最后一个键,Brancar Diego作为响应。
所以,你必须做两件事:

  • 重新构造JSON
  • 调整代码(如果需要)

JSON重构可能如下所示:

{
"names": ["Luis Lopez", "Armando Guascogne Ursular", "Brancar Diego"]
}

换句话说,JSON必须包含唯一的元素,在上面的示例中,您将正确定义JSON数组,然后可以对其进行迭代。
之后,您必须相应地调整您的Java代码。

public List<String> getName() {
    List<String> names = new ArrayList<>();
    try {
        Object obj = parser.parse(new FileReader("mypath\name.json"));
        JSONObject jsonObject = (JSONObject) obj;
        JSONArray nameArray = (JSONArray) jsonObject.get("names");
        for (int i = 0; i < nameArray.length(); i++) {
            names.add((String) nameArray.get(i));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return names;
}

如果您由于某种原因无法更改JSON,则应该使用唯一ID缓存每次迭代,使用这些ID创建新的ArrayList元素,或者仅使用Auto Increment填充它们的键,并在格式化后再次迭代,但这会降低性能、不好的做法以及难以维护,因此我不推荐使用。

相关问题