Can';t在Java中解析JSON字符串
我有一个JSON字符串:Can';t在Java中解析JSON字符串,java,android,json,parsing,jsonobject,Java,Android,Json,Parsing,Jsonobject,我有一个JSON字符串: { "dontSend" : 0, "dontSendSMS" : 0, "dontSendPush" : 0, "daysAvail" : [1, 1, 1, 1, 1, 1, 1], "allAreas" : ["Dublin 1", "Dublin 2"] } 这是我的密码: JSONObject obj = new JSONObject(str); //str as above int[] daysAvail = (i
{
"dontSend" : 0,
"dontSendSMS" : 0,
"dontSendPush" : 0,
"daysAvail" : [1, 1, 1, 1, 1, 1, 1],
"allAreas" : ["Dublin 1", "Dublin 2"]
}
这是我的密码:
JSONObject obj = new JSONObject(str); //str as above
int[] daysAvail = (int[]) obj.get(obj.get("daysAvail")); //won't work!
我得到这个错误:
无法将java.lang.String转换为int[]
我还尝试:
JSONObject obj = new JSONObject(str); //str as above
JSONArray daysAvail = obj.getJSONArray("daysAvail"); //won't work either!
我得到这个错误:
无法将java.lang.String转换为org.json.JSONArray
有人有什么想法吗
这根弦肯定和上面一样。Java解析器似乎无法识别[1,1,1,1,1,1,1]序列。似乎daysAvail不是jsonarray,而是字符串 你可以这样做
JSONObject obj = new JSONObject(str); //str as above
String str=obj.getString("daysAvail");
str=str.substring(1, str.length()-1);
String[] array=str.split(",");
在本例中,您使用obj.get(“daysAvail”)
的返回值作为同一JSONObject
的键,并将其返回值强制转换为int[]
。我本以为会有更简单的事情发生(如果我没有遗漏一些明显的事情):
JSONArray数组=obj.optJSONArray(“daysAvail”);
如果(数组!=null){
int[]daysAvail=new int[array.length()];
对于(int i=0;i),它不是字符串。它肯定没有被引用。感谢您的评论。但是当您执行obj.getString(“daysAvail”)时,它是否会返回任何值?您确定,string str
就是您提供的字符串。请在馈送到JSONObject之前尝试打印字符串。只需添加一个System.out.println(str)
My bad.[…]实际上被引用了。我刚刚再次打印了JSONObject…感谢您帮助我调试…如果我浪费了任何人的时间,我感到抱歉…;(我们所有人都会这样做…一次或多次。)我的错..复制/粘贴错误。感谢您指出@SarveshKumarSinghI坚信,OP的JSON字符串有问题。他发布的JSON是有效的,尽管我在Android上做了所有这些。也许这与此有关?
int[] daysAvail = (int[]) obj.get(obj.get("daysAvail"));
JSONArray array = obj.optJSONArray("daysAvail");
if (array != null) {
int[] daysAvail = new int[array.length()];
for(int i=0; i<array.length(); i++){
daysAvail[i] = array.optInt(i);
}
}