2013-05-06 70 views
0

我是JSON的新手,我想知道如何拉一些信息并将其放入JSON对象,然后读取一些值。 JSON的信息是这样的,JSON解析在Android中拉布尔值/整数值

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

它的照片阵列持续了相当长一段时间。我如何获得“isPublic”的价值? “Secret”是一个字符串,因为“”而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); 
     } 

这适用于所有字符串。我将如何获得农场,朋友,家庭,并将公共转换为字符串?我现在尝试了其他一些东西来获得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); 
     } 
    } 

谢谢!

+0

您是否尝试过任何建议的答案?你真的不应该问一个问题,不要提供反馈和/或尝试建议的答案。 – britzl 2013-05-07 06:33:44

回答

1

的Java不像C++,在C++ 0是假的,其他的整数是真正的

我想你应该建立这样的函数

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

,并用它在JSON解析像这样例如

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

我想你已经知道了JSON解析,所以我不会给这么多例子,但如果你对我的回答另一个问题随时问在评论:)

+0

我不想将它转换为布尔,它需要是一个字符串,所以我可以把多个值放入一个字符串,然后到一个URL下载图像。 – DDukesterman 2013-05-06 05:00:03

+0

@DDukesterman啊对不起,我误解你的问题,所以问题是解析?我想还有其他人已经给出了另一个答案,请先尝试他们的答案,如果他们的答案不起作用我会编辑我的答案:) – 2013-05-06 05:02:53

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; 
     } 
2
JSONObject jobj = result.getJSONObject("photo"); 
jobj.getBoolean("ispublic"); 
jobj.getInt("isfriend"); 

变量resultJsonObject类型应包含整个对象在代码上面都贴的

0

我建议你尝试要么JacksonGson并将JSON转换为POJOs。我发现使用java对象而不是JSONObject,JSONArray等工具更容易,更不容易出错。以下是杰克逊如何使用它的一个例子。首先,我们创建一个映射到JSON数据的对象:

public class Photos { 

    @JsonProperty 
    private int page; 

    @JsonProperty 
    private int pages; 

    ... 

    @JsonProperty("photo") 
    public List<Photo> photoList; 
} 

public class Photo { 
    @JsonProperty 
    private String id; 

    @JsonProperty 
    private String owner; 

    ... 

    @JsonProperty("ispublic") 
    public boolean isPublic; 

    @JsonProperty("isfriend") 
    public boolean isFriend; 

    @JsonProperty("isfamily") 
    public boolean isFamily; 
} 

一旦我们创建了我们的POJO,我们可以将JSON数据转换成使用ObjectMapper对象。至少在涉及到Jackson时,它会自动尝试将整数转换为布尔值(0 = false,其他任何= true)以及将字符串转换为布尔值(“true”和“false”)。

ObjectMapper mapper = new ObjectMapper(); 
Photos photos = mapper.readValue(json, Photos.class); 

for(Photo photo : photos.photoList) { 
    if(photo.isPublic) { 
     // do something 
    } 
} 

PS我已经做了一些pojos公共的一些属性来缩短例子。您可能希望添加getter并将这些属性保留为私有。