0

私は JSON が初めてで、情報を取得して JSON オブジェクトに入れ、値の一部を読み取る方法を知りたいと思っていました。json 情報は次のようになります。

{
    "photos":{
        "page":1, 
        "pages":1802,
         "perpage":100,
         "total":"180134", 
         "photo": [
            {
                "id":"8711964781", 
                "owner":"21156896@N07", 
                "secret":"3e24e45977", 
                "server":"8553", 
                "farm":9, 
                "title":"Old Harbor", 
                "ispublic":1, 
                "isfriend":0, 
                "isfamily":0
            }, 
            {
                "id":"8712680696", 
                "owner":"21156896@N07", 
                "secret":"fe82f8387b", 
                "server":"8122", 
                "farm":9, 
                "title":"Rockefeller Plaza", 
                "ispublic":1, 
                "isfriend":0, 
                "isfamily":0
            }, 
            ....

写真の配列はかなり長く続きます。「isPublic」の値を取得するにはどうすればよいですか? 「秘密」は「」のために文字列であり、isPublicは整数またはブール値ですか? 基本的に、それらを URL リンクに入れて画像をダウンロードする必要があります。

public class ReadString extends AsyncTask<String, Integer, String>{
@Override
        protected String doInBackground(String... FlickrString) {
            try {
                json = getValue();
                return json.getString(FlickrString[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
@Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            tvTest.setText(result);
        }   

これはすべての文字列で機能します。farm、isfriend、isfamily、および ispublic を文字列に変換するにはどうすればよいですか? Int値を取得するために別のことを試しました。intを読み取るためのまったく新しいクラスを作成しました。しかし、正しい int 値を取得していません。int をダウンロードして文字列に変換し、String.valueOf(x); を使用して textview を int の文字列に変更します。私は何を間違っていますか?

public class ReadInt extends AsyncTask<String, Integer, String>{

        @Override
        protected String doInBackground(String... FlickrString) {
            try {
                json = getValue();
                int x = json.getInt(FlickrString[0]);
                String y = String.valueOf(x);
                return y;
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            tvTest.setText(result);
        }   
    }   

ありがとう!

4

4 に答える 4

2
JSONObject jobj = result.getJSONObject("photo");
jobj.getBoolean("ispublic");
jobj.getInt("isfriend");

変数は、上記のコードに貼り付けたオブジェクト全体を含む必要がresultあるタイプですJsonObject

于 2013-05-06T05:02:32.830 に答える
1

Java は C++ とは異なります。C++ では 0 は false で、その他の整数は true です。

このような関数を作成する必要があると思います

private void boolean convertIntToBool(int value) {
   if(value==0) {
     return false;
   } else {
     return true;
   }
}

たとえば、このようにJSON解析で使用します

boolean isfamily = convertIntToBool(jsonPhotoObject.getInt("isfamily"));

JSON 解析については既にご存知だと思いますので、あまり例を挙げませんが、私の回答について別の質問がある場合は、コメントでお気軽にお尋ねください :)

于 2013-05-06T04:55:36.223 に答える
0

jsonString が json の結果であると想定しています。次のように値を取得できます。

 protected String doInBackground(String... FlickrString) {
            try {
                JSONObject result = new JSONBOject(jsonString);
                JSONObject photots = (JSONObject)result.get("photos");
                JSONArray photosArray = (JSONArray) result.get("photo");
                for(int i = 0; i < photosArray.length(); i++) {
                   JSONObject item = potosArray.get(i);
                   //ispublic
                   int ispublic = item.getInt("ispublic");
                   //isfriend
                   int isfriend = item.getInt("isfriend");
                   //isfamily
                   int isfamily = item.getInt("isfamily");
                }
                json = getValue();
                return json.getString(FlickrString[0]);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
于 2013-05-06T05:00:03.650 に答える