使用JSON.simple创建具有键和值的对象和数组

3
我刚刚学习了JSON.simple——一个简单的Java JSON工具包,它位于https://code.google.com/p/json-simple/。 我需要创建带有键值对的Json数组,而不仅仅是字符串值。例如,我有以下代码:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

    public class JsonSimpleExample {
         public static void main(String[] args) {

        JSONObject obj = new JSONObject();
        obj.put("name", "mkyong.com");
        obj.put("age", new Integer(100));

        JSONArray list = new JSONArray();
        list.add("msg 1");
        list.add("msg 2");
        list.add("msg 3");

        obj.put("messages", list);
       }
    }

这将产生:

{
    "age":100,
    "name":"mkyong.com",
    "messages":[
                 "msg 1",
                 "msg 2",
                 "msg 3"
               ]
}

现在我需要创建一个Json对象和数组,使用键=>值而不是只使用字符串作为值。就像下面这样:
{
    "age":100,
    "name":"mkyong.com",
    "messages":[ 
                { 
                   "msg1" : "1", 
                   "msg2" : "2", 
                   "msg3" : "3" 
                }
               ]
}

请问我该如何实现这个?谢谢。
3个回答

5

为此,您需要另外2个JSONObjects,并提供一个键来放入数组中的对象。例如:

JSONObject obj = new JSONObject();
    obj.put("name", "mkyong.com");
    obj.put("age", new Integer(100));

    JSONArray list = new JSONArray();
    JSONObject obj2 = new JSONObject();
    JSONObject obj3 = new JSONObject();
    obj3.put("msg 1","1");
    obj3.put("msg 2","2");
    obj3.put("msg 3","3");
    obj2.put("obj3",obj3);
    list.put(obj2);
    obj.put("messages", list);

谢谢,你的第一段代码确实起作用了。但是以不同的方式。虽然我更喜欢编辑后的那个。把你的list.put改成了list.add。猜想那是一个错误。 - Tosin Onikute
不,那不是错误,那是因为我们使用了不同的JSON库。但无论如何,很高兴能帮助你 :) - Shivam

3

只需创建一个新的JsonObject并将其添加到JsonArray中,而不是String

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class JsonSimpleExample {
     public static void main(String[] args) {

    JSONObject obj = new JSONObject();
    obj.put("name", "mkyong.com");
    obj.put("age", new Integer(100));

    JSONArray list = new JSONArray();
    JSONObject innerObj = new JSONObject();
    innerObj.put("msg1", "1");
    list.add(innerObj);


    obj.put("messages", list);
   }
}

1
所以,不要将字符串放入列表中,而是放入JSONObject
JSONObject listobj = new JSONObject();
listobj.put("msg1", "1");

JSONArray list = new JSONArray();
list.add(listobj);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接