Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse JSON which is within HTML in Tags in Android app [duplicate]

My problem is little different that i thought, I ask previously:Parse JSON to cofigure android application I have json coming from server, When i look it in browser source code ; this is what it looks like

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>

Function to scan 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 method:

public JSONObject getJSONFromUrl(String 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;

} 

AND ERROR im getting is : http://cl.ly/image/0z1u2v30341G

Now I guess its bcz of html doctype or something else, but I can not find whats wrong.

Q: How can I parse this JSON and store it in local variables? (I don't have option of changing server side for json)Thanks in advance.

like image 220
DPP Avatar asked Dec 06 '25 08:12

DPP


1 Answers

Well you can extract sub string starting from opening '[' till closing ']' and then parse it as json, make changes in your getJSONFromUrl() method:

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

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

     ...
}
like image 144
Waqas Avatar answered Dec 08 '25 20:12

Waqas