【问题标题】:Put a Java Map to JSON将 Java 映射到 JSON
【发布时间】:2014-03-12 23:54:16
【问题描述】:

我有一个字符串对象和键的映射,我希望将它们放入 json 文件中。我已经读过这样做的方法是将其转换为数组,并且它仅适用于对象和键都是字符串的映射。我可以很好地从地图创建 JSONObject,但不能将其放入数组中。谁能告诉我为什么这不起作用?

private static final String JSON_USER_VOTES = "user_votes";
private Map<String, String> mCheckedPostsMap; //This is populated elsewhere


JSONObject obj=new JSONObject(mCheckedPostsMap);
JSONArray array=new JSONArray(obj.toString()); // <<< Error is on this line
json.put(JSON_USER_VOTES, array);

这是错误:

org.json.JSONException: Value {"232":"true","294":"true"} of type org.json.JSONObject cannot be converted to JSONArray

【问题讨论】:

  • 你读错了。也许您应该发布一个链接到您阅读的地方。
  • 错误似乎很明显:字符串不是数组。什么是obj?
  • 可以贴出输入图吗?
  • 您可以创建一个JSONObject from a Map using the constructor,如帖子所示-但是,您的实际问题和报告的错误似乎是错误的,并且obj.toString()的使用是不正确 .也许它应该简单地是:array = new JSONArray().put(obj);?
  • 如果您有想要转换为 JSON 的地图,请找到一个接受地图的 JSON 工具包并告诉它进行转换。 Map 自然地转换为 JSON“对象”,只是并非所有 Java JSON 工具包都知道如何进行转换(因为有些坚持只对自己的自定义类进行操作)。将 Map 转换为数组几乎是零意义。

标签: java json map


【解决方案1】:

如果您希望将所有初始映射条目包含在一个 JSON 对象中,您可以使用:

JSONArray array = new JSONArray().put(obj);

这将产生类似 [{"key1:"value1","key2":"value2"}]

如果您希望每个初始映射条目作为不同的 JSON 对象,您可以使用:

JSONObject obj = new JSONObject(map); JSONArray array = new JSONArray(); for(Iterator iter = obj.keys(); iter.hasNext(); ){ String key = (String)iter.next(); JSONObject o = new JSONObject().put(key, map.get(key)); array.put(o); }

这将产生类似 [{"key1:"value1"}, {"key2":"value2"}]

【讨论】:

  • 谢谢老兄,这正是我想要的。
猜你喜欢
  • 2017-05-02
  • 2013-04-17
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 2021-11-05
  • 2011-08-05
  • 2020-03-19
  • 2020-09-13
相关资源
最近更新 更多