Android解析json的问题

标签 android json string parsing object

您好,我正在尝试从我的网站解析 json。我从 te httpresponse 获得的 jsonString 工作正常,但是当我尝试在 JSONObject 中解析它时,它给出了 NPE。 这是我现在正在测试的 json:

{ "galgjejson" :
        { "Nederlands" :  
                            { "length7" : [ 
                                                { "word" : "android" }, 
                                                { "word" : "camping" },
                                                { "word" : "koekjes" }
                                            ]
                            }, 
                            { "length8" : [
                                                { "word" : "androids" },    
                                                { "word" : "campings" },
                                                { "word" : "campings" },
                                                { "word" : "campings" },
                                                { "word" : "campings" },
                                                { "word" : "campings" },
                                                { "word" : "scheppen" }
                                            ]
                            },
                            { "length9" : [
                                                { "word" : "verslapen" },
                                                { "word" : "versleten" },
                                                { "word" : "verbrande" }
                                            ]
                            },
                            { "length10" : [    
                                                { "word" : "verslapend" },
                                                { "word" : "versletend" },
                                                { "word" : "verbranden" },
                                                { "word" : "verbranden" },
                                                { "word" : "verbranden" }
                                            ]
                            },
                            { "length11" : [
                                                { "word" : "verslapende" },
                                                { "word" : "versletende" }
                                            ]
                            },
                            { "length12" : [
                                                { "word" : "verslapenden" }
                                            ]
                            }
        },
        { "English" : 
                            { "length7" : [ 
                                                { "word" : "leavers" }, 
                                                { "word" : "shoping" },
                                                { "word" : "cooking" }
                                            ]
                            },
                            { "length8" : [
                                                { "word" : "stopping" },    
                                                { "word" : "sleeping" },
                                                { "word" : "starting" },
                                                { "word" : "starting" },
                                                { "word" : "starting" },
                                                { "word" : "starting" },
                                                { "word" : "starting" }
                                        ]
                            },
                            { "length9" : [
                                                { "word" : "somewordd" },
                                                { "word" : "somewordd" },
                                                { "word" : "somewordd" }
                                            ]
                            },
                            { "length10" : [
                                                { "word" : "someworddd" },
                                                { "word" : "someworddd" }
                                            ]
                            },
                            { "length11" : [
                                                { "word" : "somewordddd" },
                                                { "word" : "somewordddd" },
                                                { "word" : "somewordddd" },
                                                { "word" : "somewordddd" },
                                                { "word" : "somewordddd" }
                                            ]
                            },
                            { "length12" : [
                                                { "word" : "someworddddd" },
                                                { "word" : "someworddddd" },
                                                { "word" : "someworddddd" }
                                            ]
                            }

        }

}

我做的方法:

    public MikeyJSON(String jsonString) {
    Log.i("JSON", "jsonString: " + jsonString);
    try {
        JSONObject myObject = new JSONObject(jsonString);
        Log.i("JSON", "myObject_Object: " + myObject.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public String getResult(String lang, String length, int wordPos) {
    String word = "0";  

    try {
        langObject = myObject.getJSONObject(lang);
        Log.i("JSON", "Language_Object " + langObject.toString());
        lengthObject = langObject.getJSONObject(length);
        Log.i("JSON", "wordlength_Object " + lengthObject.toString());
        wordArray = lengthObject.getJSONArray(length);
        Log.i("JSON", "wordlength_Object " + wordArray.toString());
        if(wordPos>wordArray.length()) {
            wordPos = 0;
        }
        for(i=0;i<wordArray.length();i++){
            word = wordArray.getJSONObject(wordPos).toString();
        }
        Log.i("JSON", "word_Object " + word);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return word;        
}
}

我要检索的只是给定语言和长度的一个词。这是我经过大量研究后所做的,但我只是不明白为什么它不起作用。如果我的 json 无效请告诉我我做错了什么,因为我在 NPE 之前收到此错误:

03-18 09:17:40.052: W/System.err(1464): org.json.JSONException: Names must be strings,     
but {"length8":[{"word":"androids"},{"word":"campings"},{"word":"campings"},  
{"word":"campings"},{"word":"campings"},{"word":"campings"},{"word":"scheppen"}]} is of   
type org.json.JSONObject at character 514 of { "galgjejson" :
03-18 09:17:40.052: W/System.err(1464):             { "Nederlands" :  
03-18 09:17:40.052: W/System.err(1464):                                   { "length7" : [ 
03-18 09:17:40.052: W/System.err(1464):                                                     { "word" : "android" }, 
03-18 09:17:40.052: W/System.err(1464):                                                     { "word" : "camping" },
03-18 09:17:40.052: W/System.err(1464):                                                     { "word" : "koekjes" }
03-18 09:17:40.062: W/System.err(1464):                                                 ]
03-18 09:17:40.062: W/System.err(1464):                                 }, 
03-18 09:17:40.072: W/System.err(1464):                                 { "length8" : [
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "androids" },    
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "campings" },
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "campings" },
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "campings" },
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "campings" },
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "campings" },
03-18 09:17:40.072: W/System.err(1464):                                                     { "word" : "scheppen" }
03-18 09:17:40.072: W/System.err(1464):                                                 ]
03-18 09:17:40.082: W/System.err(1464):                                 },
03-18 09:17:40.092: W/System.err(1464):                                 { "length9" : [
03-18 09:17:40.092: W/System.err(1464):                                                     { "word" : "verslapen" },
03-18 09:17:40.092: W/System.err(1464):                                                     { "word" : "versleten" },
03-18 09:17:40.102: W/System.err(1464):                                                     { "word" : "verbrande" }
03-18 09:17:40.102: W/System.err(1464):                                                 ]
03-18 09:17:40.102: W/System.err(1464):                                 },
03-18 09:17:40.102: W/System.err(1464):                                  { "length10" : [   
03-18 09:17:40.102: W/System.err(1464):                                                     { "word" : "verslapend" },
03-18 09:17:40.102: W/System.err(1464):                                                     { "word" : "versletend" },
03-18 09:17:40.102: W/System.err(1464):                                                     { "word" : "verbranden" },
03-18 09:17:40.102: W/System.err(1464):                                                     { "word" : "verbranden" },
03-18 09:17:40.112: W/System.err(1464):                                                     { "word" : "verbranden" }
03-18 09:17:40.112: W/System.err(1464):                                                 ]
03-18 09:17:40.112: W/System.err(1464):                                 },
03-18 09:17:40.122: W/System.err(1464):                                 { "length11" : [
03-18 09:17:40.122: W/System.err(1464):                                                     { "word" : "verslapende" },
03-18 09:17:40.122: W/System.err(1464):                                                     { "word" : "versletende" }
03-18 09:17:40.122: W/System.err(1464):                                                 ]
03-18 09:17:40.132: W/System.err(1464):                                 },
03-18 09:17:40.132: W/System.err(1464):                                 { "length12" : [
03-18 09:17:40.132: W/System.err(1464):                                                     { "word" : "verslapenden" },
03-18 09:17:40.132: W/System.err(1464):                                                 ]
03-18 09:17:40.132: W/System.err(1464):                                 }
03-18 09:17:40.142: W/System.err(1464):             },
03-18 09:17:40.142: W/System.err(1464):             { "English" : 
03-18 09:17:40.142: W/System.err(1464):                                 { "length7" : [ 
03-18 09:17:40.152: W/System.err(1464):                                                     { "word" : "leavers" }, 
03-18 09:17:40.152: W/System.err(1464):                                                     { "word" : "shoping" },
03-18 09:17:40.152: W/System.err(1464):                                                     { "word" : "cooking" }

最佳答案

您的 JSON 无效 - 这是正确的格式:

{ "Nederlands" :  [
                        { "length7" : [ 
                                            { "word" : "android" }, 
                                            { "word" : "camping" },
                                            { "word" : "koekjes" }
                                        ]
                        }, 
                        { "length8" : [
                                            { "word" : "androids" },    
                                            { "word" : "campings" },
                                            { "word" : "campings" },
                                            { "word" : "campings" },
                                            { "word" : "campings" },
                                            { "word" : "campings" },
                                            { "word" : "scheppen" }
                                        ]
                        }]
}

目前,“Nederlands”采用 JSONArray 格式(它包含多个 JSONObject),但您的响应缺少方括号。如果您将“Nederlands”解析为 JSONArray 并一个一个地删除“length”JSONObjects,那么您应该能够使其工作

关于Android解析json的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15474440/

相关文章:

java - 传递给 native 代码的字符串字节数组末尾出现乱码

C# 金钱的字符串格式问题

json - 延迟格式化的递归 JSON 类型无法作为隐式值找到

c# - 反序列化具有未知字段的 JSON

json - java - 如何在Java中REST Web服务的PUT和POST方法中使用JSON作为输入

java - canvas.drawBitmap 仅绘制最后修改的位图,而不是中间值

python - 为什么 split() 在同一字符串上返回的元素多于 split ("")?

java - 更新主线程不起作用

android - 在 WebView 中从 Facebook 获取视频 url

android - 如何使用 Theme.MaterialComponents 隐藏状态栏和导航栏