从Java访问JSON字符串中的long值

时间:2014-04-25 12:01:15

标签: java json tomcat

我想获得long" transmitBytes"的价值。在这个JSON字符串中

[

    {
       "portNumber" : 2,

       "queueId" : 0,

       "transmitBytes" : 1944145,

       "transmitPackets" : 1684,

       "transmitErrors" : 0
    }

]

我使用了org.json库并实现了代码:

    String queueJson = [{"portNumber":2,"queueId":0,"transmitBytes":1944145,"transmitPackets":1684,"transmitErrors":0}];

    System.out.println("The JSON string is: " + queueJson);


     JSONObject obj; 

     try { 
     obj = new JSONObject(queueJson); 
     long TXbytes =  obj.getLong("transmitBytes");
     System.out.println("The amount of transmittet bytes is " + TXbytes);
     } catch (JSONException e) { 
             // TODO Auto-generated catch block
     e.printStackTrace(); 
     }

当我运行Apache tomcat Web服务器时,会出现问题。发生以下错误:

SEVERE: A child container failed during start

以下:

org.apache.catalina.LifecycleException: Failed to start component

当我删除JSONObject类和相应的org.json库时,一切正常,服务器运行没有任何问题。有谁知道为什么会出现这个问题,还有其他库可以从Java访问JSON字符串中的long值吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

您的JSON表单是:

Array -> Object(s)

所以你应该先访问数组然后再访问

JSONArray array = new JSONArray(queueJson);
JSONObject obj = array.getJSONObject(0);

0因为它是第一个索引(唯一一个)。其他代码将是相同的。

另一种方法是通过编辑你的Json来修复你的问题(如果它是由你制作的)并让它返回如下内容:

{
    "portNumber": 2,
    "queueId": 0,
    "transmitBytes": 1944145,
    "transmitPackets": 1684,
    "transmitErrors": 0
}

答案 1 :(得分:0)

试试这段代码:

JSonArray array=new JSonArray(queueJson);

而不是obj = new JSONObject(queueJson);