2014-12-13 67 views
0

解码JSON我跟着就如何JSON和Java解码此教程:https://code.google.com/p/json-simple/wiki/DecodingExamples问题与JSON-简单

在我的项目,我得到info_string

{"server_ip":"http://localhost:3000/","device_id":14} 

,我想解码:我试着:

System.out.println(info_string); 
=> {"server_ip":"http://localhost:3000/","device_id":14} 
    Object obj = JSONValue.parse(info_string); 
    System.out.println(obj); 
=> null 
    JSONArray array=(JSONArray)obj; 
=> null 
    System.out.println(array); 

正如你可以看到arrayobj变量是null和不包含任何数据! 我错了什么?谢谢

+0

任何非打印/从服务器获得的字符串中的不可见字符? 'String info_string =“\ u0000 {\”server_ip \“:\”http:// localhost:3000/\“,\”device_id \“:14}”;'会显示您所看到的行为。否则它对我来说工作得很好(直到你试图将'obj'强制转换为'JSONArray',但这是另一回事)。 – 2014-12-13 10:21:31

+0

@邹邹你会怎样解决这个问题?修剪()字符串? – 2014-12-13 10:28:40

+0

@邹邹你是对的'info_string.trim()'工作!你能写一个答案吗? – 2014-12-13 10:29:52

回答

1

肯定有不可打印/不可见的字符。我建议你使用regular expression to remove them,因为如果你的字符串看起来像

String info_string = " {\"server_ip\":\u0000\"http://localhost:3000/\",\"device_id\":14}"; 

trim()不会做任何事情。

因此,与尝试:

Object obj = JSONValue.parse(info_string.replaceAll("\\p{C}", "")); 

,我怎么能得到一个值?例如device_id从这个 obj?

在你的情况,parse会返回一个JSONObject,这样你就可以把结果,然后用get方法来获取与相应的键关联的值:

JSONObject obj = (JSONObject) JSONValue.parse(info_string); 
String serverIp = (String) obj.get("server_ip"); //http://localhost:3000/  
long deviceId = (Long) obj.get("device_id"); //14