从json数据中提取特定字段

时间:2014-09-11 05:02:52

标签: java json mongodb

我想从这个json数据中提取“total”字段中的字段“2008”和“2009”。我试过,但它显示空指针异常..我不知道出了什么问题。下面是我试过的代码。

    /*insertion of data*/

        DB preDB = mongo.getDB("database");
            DBCollection coll = preDB.getCollection("agrinindstry");
            BasicDBObject doc1 = new BasicDBObject();
            doc1.put("test", str);
            coll.insert(doc1);
            System.out.println(doc1);


      /***retrieving data***/
            DBCursor cursor = coll.find();

            JSONArray mylist = new JSONArray();
            String result = "";
            while (cursor.hasNext()) 
            {
                result = cursor.next().get("2008").toString();
                mylist.add(result);
                System.out.println(mylist);

            }

这是我的json数据

{"maindata":[
{

"title":"industry",
"2008":37,
"2009":44,
"2010":42


 },
 {

"title":"agriculture",
"2008":4,
"2009":0,
"2010":6

 }
 ],
"total":{
"title:"sum",
"2008":41,
"2009":44,
 "2010":48

 }
}

3 个答案:

答案 0 :(得分:0)

((DBObject)cursor.next().get("total")).get("2008").toString();

答案 1 :(得分:0)

您可以使用任何JAVA tootkit for JSON简化您的任务,请查看此example

Check it out...

有关JSON以及如何解析它的更多信息,请查看:

如果您读取了JSONObject的#av(字符串)的javadoc,它实际上是HashMap.get(String),它表示

返回:指定键映射到的值,如果此映射不包含键的映射,则返回null

您的JSON不包含关键时间的映射。

编辑:

考虑这个来解析你的JSON数据:

     {"schedule":{"service":{"type":"radio","key":"radio1","title":"BBC Radio 1",...

您首先需要将日程安排作为JSONObject,然后作为JSONObject服务,然后将标题作为普通字符串值。根据JSON值的类型以不同方式应用它。

See this link

答案 2 :(得分:0)

试试这个:

     //get the data from mongoDB which documents has "total" key.

     DBObject dbObject = new BasicDBObject().append("total", new BasicDBObject("$exists", true));
     DBCursor cursor = collection.find(dbObject);

        JSONArray mylist = new JSONArray();
        String result = "";
        while (cursor.hasNext()) 
        {
            result = ((DBObject)cursor.next().get("total")).get("2008").toString();
            mylist.add(result);
            System.out.println(mylist);

        }