【问题标题】:Java not returning array object from list.toArray()Java 没有从 list.toArray() 返回数组对象
【发布时间】:2015-10-28 14:31:56
【问题描述】:

我有一个movie 课程 那有一个private List<String> reviews = new ArrayList<String>();

在我设置的构造函数上

public Movie()
{
    this.reviews.add("");
}

当我尝试将它添加到 JSON 对象时,

JSONObject.put("reviews", this.reviews.toArray(new String[reviews.size()]));

我检查了JSON 文件,它返回"reviews":[Ljava.lang.String;@5cad8086]

这里发生了什么?我想将评论数组放入“评论”字段中,例如{"reviews" : ["somestring1", "somestring2"]}

【问题讨论】:

  • 什么是JSONObject
  • 这是一个 JSONObject,其中 put 方法分别接受字段和值作为参数
  • 您是在创建 JSON 文件,还是在使用某个库?
  • 来自哪个图书馆?哪个版本的?
  • 为什么还是要对此投反对票?

标签: java arrays json list


【解决方案1】:

json-simple 显然不支持将数组类型直接添加到JSONObject。将JSONObject 渲染为String 时,它只是在其值上调用toStringJSONObjectHashMap)。

因此,您会看到在数组类型上调用 toString 的默认 String 结果。见

使用 json-simple 最合适的解决方案是从您的 List 创建一个 JSONArray 对象并添加它

JSONArray array = new JSONArray();
array.addAll(reviews);
JSONObject.put("one", array);

假设JSONObject 是一个引用JSONObject 对象的变量。


我会以 json-simple 是一个糟糕的 JSON 解析器/生成器库的观点结束本文。在 Gson、Jackson 甚至 org.json 中都有更好的替代方案。

【讨论】:

    【解决方案2】:

    你必须使用这个:

    Arrays.toString(this.reviews.toArray(new String[reviews.size()]));

    【讨论】:

    • 这似乎生成"reviews":"[myString]" 而不是"reviews":[{"myReviewString1"}, {myReviewString2}]
    • @MaTaKazer 你刚刚发布的是无效的json。
    • 我想要类似{"reviews" : ["somestring1", "somestring2"]}
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多