3

我的问题与我想的略有不同,我之前问过:Parse JSON to cofigure android application 我有来自服务器的 json,当我在浏览器源代码中查看它时;这就是它的样子

JOSON.config:

<html>
<head></head>
<body>
<pre>
 [

    {
        "sett": " ",
        "glHdr": {
            "sm": [ ],
            "scleHPad": false,
            "st": "sbsm"
        },
        "colrBG": [
            23,
            105,
            184,
            100
        ],
        "colrTB": [
            0,
            0,
            0,
            0
        ],
        "colrTR": [
            255,
            255,
            255,
            100
        ],
        "glFtr": {
            "icoSz": "icoSzN",
            "sm": [ ],
            "scleHPad": false,
            "gvNR": 3,
            "gvHIT": false,
            "gvNC": 3,
            "st": "igsm"
        },
        "statBr": true
    },
    {
        "sm": [
            {
                "tbico": "b43-jeep.png",
                "t": "Welcome!",
                "w": "http://google.com/start",
                "st": "w",
                "wTBL": "wTBLN"
            },
            {
                "t": "Content screen title",
                "f": "Eltec%20Spec%20sheet%20Gim%20RD30W.pdf",
                "st": "f"
            },
            {
                "tbico": "109-chicken.png",
                "t": "Sub menu",
                "sm": [
                    {
                        "t": "Screen 1",
                        "st": "f"
                    },
                    {
                        "t": "Screen 2",
                        "w": "Http://google.com",
                        "st": "w",
                        "wTBL": "wTBLT"
                    }
                ],
                "st": "sm"
            },
            {
                "st": "f"
            }
        ],
        "st": "tbm"
    }

]

</pre>
</body>
</html>

扫描json的函数:

   public void doScanAppConfigJson(){


            JSONArray appConfig = null;

            // Function for looping json object via ParseJson class.
            //Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            //Getting json strings from url
            JSONObject jsonObject = jParser.getJSONFromUrl(url);

        try{
            //Getting array of settings
            appConfig = jsonObject.getJSONArray(ConfigConstants.TABLE_VIEW_SUB_MENU_CONFIG);
            //loop throw all the objects under -sm[]
            for (int i = 0; i < appConfig.length(); i++){

                JSONObject sm = appConfig.getJSONObject(i);

                //Now store each of this json in local constant var.

                String tabTitle = sm.getString(TAG_TITLE);

                String webAddress = sm.getString(TAG_WEB_ADDRESS);

                String screenType = sm.getString(TAG_SCREEN_TYPE);

                String fileName = sm.getString(TAG_FILENAME);

            }

        }catch (JSONException e){
            e.printStackTrace();

        }

        }

getJsonFromUrl 方法:

公共 JSONObject getJSONFromUrl(字符串 url){

    //Global authentication for link username and password.
    Authenticator.setDefault(new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication(){

        return new PasswordAuthentication("username", "password".toCharArray());   
        }

    });

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();           

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

} 

我得到的错误是:http ://cl.ly/image/0z1u2v30341G

现在我猜它是 html doctype 或其他东西的 bcz,但我找不到什么问题。

问:如何解析这个 JSON 并将其存储在局部变量中?(我没有为 json 更改服务器端的选项)提前致谢。

4

1 回答 1

1

好吧,您可以从打开 ' [ ' 直到关闭 ' ] ' 提取子字符串,然后将其解析为 json,在您的getJSONFromUrl()方法中进行更改:

public void getJSONFromUrl() {
     ...
     ...

     json = sb.toString().substring(html.indexOf("["), html.lastIndexOf("]") + 1);

     ...
}
于 2013-03-27T04:54:45.267 回答