Java 如何在android中将HashMap转换为json数组?

Java 如何在android中将HashMap转换为json数组?,java,android,arrays,json,Java,Android,Arrays,Json,我想转换为我的代码如下: Map<String, String> map = new HashMap<String, String>(); map.put("first", "First Value"); map.put("second", "Second Value"); 你可以用 JSONArray jarray=JSONArray.fromObject(map)试试这个 public JSONObject (Map copyFrom) 通过从给定映射复制所

我想转换为我的代码如下:

Map<String, String> map = new HashMap<String, String>();

map.put("first", "First Value");

map.put("second", "Second Value");
你可以用

JSONArray jarray=JSONArray.fromObject(map)

试试这个

public JSONObject (Map copyFrom) 
通过从给定映射复制所有名称/值映射来创建新的JSONObject

参数 从键为String类型且值为受支持类型的映射复制

投掷 如果映射的任何键为null,则为NullPointerException

基本用法:

JSONObject obj=new JSONObject(yourmap);
从JSONObject获取json数组

编辑:

JSONArray array=new JSONArray(obj.toString());
编辑:(如果发现异常,您可以按照@krb686评论中的说明进行更改)


映射由键/值对组成,即每个条目有两个对象,而列表中每个条目只有一个对象。您可以做的是提取所有数据,然后将它们放入数组中:

Set<Map.Entry<String, String> entries = map.entrySet();
JSONArray mJSONArray = new JSONArray(entries);

Set这是最简单的方法

只用

JSONArray jarray = new JSONArray(hashmapobject.toString);

由于AndroidAPIl19,您只需执行
新建JSONObject(newHashMap())
。但在旧的API LVL上,您会得到难看的结果(简单地将toString应用于每个非原语值)

我收集了来自JSONObject和JSONArray的方法,以简化并获得漂亮的结果。您可以使用我的解决方案类:

package you.package.name;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.lang.reflect.Array;
导入java.util.Collection;
导入java.util.Map;
公共类JsonUtils
{
公共静态JSONObject mapToJson(映射数据)
{
JSONObject对象=新的JSONObject();
for(Map.Entry:data.entrySet())
{
/*
*通过检查密钥是否为非null和
*正确类型的。(我们仍然延迟验证值)。
*/
String key=(String)entry.getKey();
if(key==null)
{
抛出新的NullPointerException(“key==null”);
}
尝试
{
put(key,wrap(entry.getValue());
}
捕获(JSONException e)
{
e、 printStackTrace();
}
}
返回对象;
}
公共静态JSONArray collectionToJson(收集数据)
{
JSONArray JSONArray=新的JSONArray();
如果(数据!=null)
{
用于(对象数据:数据)
{
放(包(aData));
}
}
返回jsonArray;
}
公共静态JSONArray arrayToJson(对象数据)抛出JSONException
{
如果(!data.getClass().isArray())
{
抛出新的JSONException(“不是原始数据:+data.getClass());
}
最终整数长度=Array.getLength(数据);
JSONArray JSONArray=新的JSONArray();
对于(int i=0;i
然后,如果将mapToJson()方法应用于地图,则可以得到如下结果:

{
  "int": 1,
  "Integer": 2,
  "String": "a",
  "int[]": [1,2,3],
  "Integer[]": [4, 5, 6],
  "String[]": ["a","b","c"],
  "Collection": [1,2,"a"],
  "Map": {
    "b": "B",
    "c": "C",
    "a": "A"
  }
}

所以,你有一个地图,但想要一个数组?首先,独立于JSON进行转换,然后将结果(现在是列表/数组)提供给相应的JSON转换器。发布的代码将不起作用,并将导致编译器错误,这应该包括在发布中,因为没有
数组.asList(Map)
,因为这没有意义,因为没有通用转换(尽管,也许您需要条目列表?)。也就是说,这个问题与JSON没有直接关系。@pst:谢谢,但有什么解决办法吗?要使用key=>value创建数组并将其转换为json?在android ActivityArray中没有“key=>value”。提供示例地图数据和预期的JSON数组输出。键值仅在集合中的地图族中可用,请尝试将地图转换为字符串并使用字符串。尝试以下操作:这些类在JSON Lib库中可用。你可以在这里找到这个库:@Forhad:谢谢,但是我的哈希是在我的代码中动态创建的,所以它不适合我。是否有其他选项可以创建key=>value的数组并在android活动中转换为json?我已经尝试过了,但没有成功。你能把代码贴在这里吗?我不知道应该用什么逻辑。我只能希望它经过测试-显示输入和它(在每个阶段)产生的结果将使这成为一个可接受的答案。@Pragnani不幸的是,这不起作用。也许过去是,但现在不是了。这将抛出:
JSONArray文本必须以“[”开头,字符1
位于从需要更改为:
JSONArray数组的JSONObject修复程序创建JSONArray的行中
Set<String> keys = map.keySet();
JSONArray mJSONArray = new JSONArray(keys);
List<String> values = map.values();
JSONArray mJSONArray = new JSONArray(values);
JSONArray jarray = new JSONArray(hashmapobject.toString);
{
  "int": 1,
  "Integer": 2,
  "String": "a",
  "int[]": [1,2,3],
  "Integer[]": [4, 5, 6],
  "String[]": ["a","b","c"],
  "Collection": [1,2,"a"],
  "Map": {
    "b": "B",
    "c": "C",
    "a": "A"
  }
}