-1

json の解析中にエラーが発生しました。助けてください。json の URL を読みましたが、json を解析しようとすると例外が発生します。コード:

    public String lecturaJsonTusPerlas() {


    DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpPost httppost = new HttpPost("http://www.tvnotas.com.mx/rss/feed/tvn-horoscopo.json");
    // Depends on your web service
    httppost.setHeader("Content-type", "application/json");

    InputStream inputStream = null;
    String result = null;
    try {
        HttpResponse response = httpclient.execute(httppost);           
        HttpEntity entity = response.getEntity();

        inputStream = entity.getContent();
        // json is UTF-8 by default
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();

        String line = null;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }
        result = sb.toString();
        return result;

    } catch (Exception e) { 
        Log.d("DEFEKAS","EXCEPCION");

    }
    finally {
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
    }
    return result;

json を読み取るには:

        JSONArray jsonArray2 = new JSONArray(lecturaJsonTusPerlas);

        for (int i = 0; i < jsonArray2.length(); i++) {
            JSONObject jsonObject = jsonArray2.getJSONObject(i);

        String atr1 = null;
        boolean var1 = jsonObject.getBoolean(atr1);
        String atr2 = null;
        int var2 = jsonObject.getInt(atr2);
        String atr4 = null;
        String var3 = jsonObject.getString(atr4);
        }

Google Chrome拡張機能を使用して抽出しようとしているときに問題がないため、URLはjsonであると思います。

4

4 に答える 4

2

得られるのは JSONObject です

    JSONObject jb = new JSONObject(lecturaJsonTusPerlas());

あなたのjsonは、使用したリンクから以下のようになります

{ // jsonobject node
    "@attributes": {
        "version": "2.0"
    },
    "channel": {
        "title": "TV Notas",
        "link": "http://www.tvnotas.com.mx",
        "description": "TV Notas - Horoscopos",
        "pubDate": "Mon, 23 Sep 2013 2:30:12 -0500",
        "generator": "http://www.tvnotas.com.mx",
        "language": "es",
        "item": [ // json array of item's
            {
                "title": "Acuario",
                "link": "http://usa.tvnotas.com.mx/horoscopo/1-acuario/",
                "pubDate": "Mon, 23 Sep 2013 02:30:12 -0500",
                "category": "Horoscopo",
                "guid": "http://www.tvnotas.com.mx/horoscopo/1-acuario/",
                "description": "Si has sido soberbio con tus compañeros de trabajo o empleados, con familiares o amigos y no les has perdonado sus malos momentos, ahora se te presentará la oportunidad de estrechar lazos.",
                "enclosure": {
                    "@attributes": {
                        "url": "http://www.tvnotas.com.mx/advf/imagenes/2013/01/50fdbd604f653_150x118.jpg",
                        "length": "3587",
                        "type": "image/jpeg"
                    }
                },
                "elemento": "Aire",
                "planeta": "Urano",
                "signo_compatible": "Cáncer",
                "signo_enemigo": "El excéntrico",
                "numero": "25",
                "arquetipo": "El Loco Sabio",
                "arcangel": "Sakmakrel",
                "color": "Verde",
                "dia_suerte": "28"
            },
            ....

パースします

try {
        JSONObject jb = new JSONObject(lecturaJsonTusPerlas());
        JSONObject job = jb.getJSONObject("channel");
        String channeltitle= job.getString("title");
        String channellink= job.getString("link");
        String channeldecription= job.getString("description");
        String channeldpubdate= job.getString("pubDate");
        String channeldgenerator = job.getString("generator");
        String channeldlanguage = job.getString("language");
        JSONArray jr = job.getJSONArray("item");

        for(int i=0;i<jr.length();i++)
        {
            JSONObject jb1 = (JSONObject) jr.get(i);
            String title = jb1.getString("title");
                            // similar for title link and others 
            JSONObject enclosure = jb1.getJSONObject("enclosure");
            JSONObject attributes= enclosure.getJSONObject("@attributes");
            String url = attributes.getString("url");
            Log.i("....",""+title);
            String elemento= jb1.getString("elemento");
            // similar for others planeta..
        }

        } catch (Exception e) {
        e.printStackTrace();
        }
于 2013-09-23T08:36:20.590 に答える
1

Try this

JSONObject jObject = new JSONObject(lecturaJsonTusPerlas);

JSONArray jsonArray2 = jObject.getJSONArray("your array key");

        for (int i = 0; i < jsonArray2.length(); i++) {
            JSONObject jsonObject = jsonArray2.getJSONObject(i);

boolean var1 = jsonObject.getBoolean(atr1);
int var2 = jsonObject.getInt(atr2);
String var3 = jsonObject.getString(atr4);

}

don't initialize string values as null.

于 2013-09-23T08:35:23.093 に答える
1

次の行が原因で NullPointerException が発生している可能性があります。

String atr1 = null;
boolean var1 = jsonObject.getBoolean(atr1);
String atr2 = null;
int var2 = jsonObject.getInt(atr2);
String atr4 = null;
String var3 = jsonObject.getString(atr4);

「null」参照で解析しようとしています。atr1、atr2、および atr4 を参照してください。これらの文字列は「null」で初期化されます。

于 2013-09-23T08:30:49.383 に答える
0

このエラーが発生する理由は、json 要素の最上位ノードが JSON 配列ではなくオブジェクトであるためです。

したがって、解析を開始するには、次のようなものを書く必要があります

JSONObject jObject = new JSONObject(result);
于 2013-09-23T08:32:58.767 に答える