将Json字符串解析为映射

时间:2014-09-16 12:40:09

标签: java json

我有一个类似下面的JSON值,我需要解析数据的对值。

  {
    "columns" : [ "Book", "Publisher" ],
    "data" : [ [ "Book1", "Author1" ], [ "Book2", "Author2" ], [ "Book3", "Author3" ]]
  }

我应该如何使用org.json库来提取我需要的值,并放入像Map这样的数据类型?我正在使用Java编程。提前谢谢!

编辑:“数据”的数据集是查询结果,因此我们无法确定代码中的值。 Book和Publisher列已经知道,但我们对数据集的唯一了解是它们是一对值。

2 个答案:

答案 0 :(得分:2)

由于您尚未发布您尝试过的内容,因此我无法为您编码。不过这里有一些东西让你开始使用json。

public static void main(String[] args) throws IOException {
    String jsondata = "{\"columns\" : [\"Book\", \"Publisher\" ],    \"data\" : [ [ \"Book1\", \"Author1\" ], [ \"Book2\", \"Author2\" ], [ \"Book3\", \"Author3\" ]]}";
    JSONObject obj = (JSONObject)JSONValue.parse(jsondata);         
    JSONArray jsonval= (JSONArray)obj.get("data");
    HashMap<String, String> map = new HashMap<String, String>();

    for (int i=0; i<jsonval.toArray().length; i++) {
        JSONArray datapair = (JSONArray)jsonval.get(i);
        String book = (String) datapair.get(0);
        String author = (String)datapair.get(1);
        map.put(book, author);
    }
}

浏览文档以了解插入地图的语法

答案 1 :(得分:0)

以下是使用org.json lib编译和解码json的示例:

编码:

 JSONArray list1 = new JSONArray();
  list1.add("foo");
  list1.add(new Integer(100));
  list1.add(new Double(1000.21));

  JSONArray list2 = new JSONArray();
  list2.add(new Boolean(true));
  list2.add(null);

  JSONObject obj = new JSONObject();
  obj.put("name","foo");
  obj.put("num",new Integer(100));
  obj.put("balance",new Double(1000.21));
  obj.put("is_vip",new Boolean(true));
  obj.put("nickname",null);

  obj.put("list1", list1);
  obj.put("list2", list2);

  System.out.println(obj);
Result: {"balance":1000.21,"list2":[true,null],"num":100,"list1":["foo",100,1000.21],"nickname":null,"is_vip":true,"name":"foo"}

解码:

以下示例使用JSONObject和JSONArray,其中JSONObject是java.util.Map,JSONArray是java.util.List,因此您可以使用Map或List的标准操作来访问它们。

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

class JsonDecodeDemo 
{
   public static void main(String[] args) 
   {
      JSONParser parser=new JSONParser();
      String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
      try{
         Object obj = parser.parse(s);
         JSONArray array = (JSONArray)obj;
         System.out.println("The 2nd element of array");
         System.out.println(array.get(1));
         System.out.println();

         JSONObject obj2 = (JSONObject)array.get(1);
         System.out.println("Field \"1\"");
         System.out.println(obj2.get("1"));    

         s = "{}";
         obj = parser.parse(s);
         System.out.println(obj);

         s= "[5,]";
         obj = parser.parse(s);
         System.out.println(obj);

         s= "[5,,2]";
         obj = parser.parse(s);
         System.out.println(obj);
      }catch(ParseException pe){
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}
While compile and executing above program, this will produce following result:

The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}

Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]