【问题标题】:Extract specific fields from a json data从 json 数据中提取特定字段
【发布时间】:2014-09-11 05:02:52
【问题描述】:

我想从这个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

 }
}

【问题讨论】:

    标签: java json mongodb


    【解决方案1】:
    ((DBObject)cursor.next().get("total")).get("2008").toString();
    

    【讨论】:

    • 谢谢@waitingmyself..但它在线程“main”java.lang.RuntimeException中显示异常异常:不再
    • 我认为您的代码只是一个提示,我看不出您是如何在代码中插入数据的。 doc1.put("test", str);什么是str
    【解决方案2】:

    您可以使用任何用于 JSON 的 JAVA 工具包来简化您的任务,看看这个example

    Check it out...

    要进一步了解 JSON 以及如何解析它,请查看以下内容:

    如果您阅读 JSONObject#get(String) 的 javadoc,它实际上是 HashMap.get(String),它会说明

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

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

    编辑:

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

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

    您需要首先将 schedule 作为 JSONObject,然后将 service 作为 JSONObject,然后将 title 作为普通 String 值。根据 JSON 值的类型应用不同的方法。

    See this link

    【讨论】:

      【解决方案3】:

      试试这个:

           //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);
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 2015-02-18
        相关资源
        最近更新 更多