2

我是安卓新手。我对 Android 中的 JSON 解析略知一二。我正在解析一个 twitter 提要,我想在其中解析名为“user”的标签,其中包含profile_image_urlscreen_name.

JSON 提要在这里。这是我的代码:

JSONParser jParser = new JSONParser();

// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);

try {
    // Getting Array of Contacts

    contacts = json.getJSONArray(USER);

    // looping through All Contacts
    for(int i = 0; i < contacts.length(); i++){
        JSONObject c = contacts.getJSONObject(i);
    }
4

5 回答 5

3

您可以在 Android中使用JSONObject 。

    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    String jsonString = jParser.getJSONFromUrl(url).tostring();

    JSONArray json= new JSONArray(jsonString);



    try {

        // looping through All Contacts
            for(int i = 0; i < json.length(); i++){
              JSONObject contacts = json.getJSONObject(i);

                JSONObject user = contacts.getJSONObject("user");

                String imageUrl = user.getString("profile_image_url");
                String screenName = user.getString("Screen_name");

            }
        }catch(Exception e)
   {
   }
于 2012-08-28T18:11:18.060 回答
1

您可以使用json.org允许轻松处理 JSON 文件的库,这些库包含在 Android 中。

但是,您可以使用它Gson from Google, or Jackson来执行此操作....

看到这个网站非常有帮助:

http://www.vogella.com/articles/AndroidJSON/article.html

上面的这个站点还解释了 twitter Json 解析..

例如:

    JSONObject jsonObject = jsonArray.getJSONObject(i);
    jsonObject.getString("name");
于 2012-08-28T18:11:36.203 回答
1

使用Gson. 检查用户指南

示例模型:

Class User
{
   public String profile_image_url;
   public String screen_name;
}

示例解析器:

Gson gson = new Gson();
User user = gson.fromJson("['profile_image_url':'the_url', 'screen_name':'the_name']", User.class);

PS:确保profile_image_urljson 中的名称与 Class 的成员名称完全相同。

于 2012-08-28T18:48:10.027 回答
0

这是我从 Youtube 获取频道列表的代码,希望对您有所帮助

public void getYouTubeData(){
    StringBuilder urlString = new StringBuilder();
    HttpURLConnection urlConnection = null;
    URL url = null;
    urlString.append("http://gdata.youtube.com/feeds/api/users/CaliforniaDMV/playlists?v=2&alt=json");
    m_ytdata = new ArrayList<YoutubeChannelList.YouTubePlayListData>();

    try {
        url = new URL(urlString.toString());
    } catch (MalformedURLException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
    } catch (IOException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    try {
        urlConnection.setRequestMethod("GET");
    } catch (ProtocolException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    urlConnection.setDoOutput(true);
    urlConnection.setDoInput(true);
    try {
        urlConnection.connect();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }
    InputStream inputStream = null;
    try {
        inputStream = urlConnection.getInputStream();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String result = null;
    if(inputStream != null){
     result = convertStreamToString(inputStream);
    } else {
        Log.d("NULLLL","NULL");
    }
    try {
        inputStream.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    urlConnection.disconnect();
    try {
        final JSONObject json = new JSONObject(result);
        final JSONObject jsonentry = json.getJSONObject("feed");
        int length = jsonentry.length();
        //final JSONObject jsonarr = jsonentry.getJSONObject("entry")
        final JSONArray jsonarr = jsonentry.getJSONArray("entry");
        int len = jsonarr.length();

        //Log.d("XXX", "Length is " + length + "arry len: " + len);

        for(int loop = 0;loop<len;loop++){
            YouTubePlayListData yt = new YouTubePlayListData();
            final JSONObject inner = jsonarr.getJSONObject(loop);
            yt.setIds(inner.getJSONObject("yt$playlistId").getString("$t"));
            //yt.setVideoId(getThumbnailImage(inner.getJSONObject("yt$playlistId").getString("$t")));
            yt.setUpdated(inner.getJSONObject("updated").getString("$t").substring(0,10));
            yt.setTitles(inner.getJSONObject("title").getString("$t"));
            yt.setCount(Integer.parseInt(inner.getJSONObject("yt$countHint").getString("$t")));
            //Log.d("LOOP","id: " +inner.getJSONObject("yt$playlistId").getString("$t"));
            //Log.d("LOOP","updated: " + inner.getJSONObject("updated").toString());
            //Log.d("LOOP","title: " + inner.getJSONObject("title").getString("$t"));
            m_ytdata.add(yt);
        }
        runOnUiThread(returnRes);

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
于 2012-08-28T18:12:39.530 回答
0

android 提供的 vanilla JSON 解析器可以解析数据,不幸的是它在内存中构建了完整的 JSON 模型(如 XML 的 DOM 解析器)——这适用于少量数据,但对于稍大的数据则不切实际,因为它分配和占用了很多记忆。

一些像 GSON oder jackson 这样的 pull parser 会更适合您的任务(jackson 声称更快,但也更重的 jars 和更多的依赖项 - 我更喜欢 GSON)

您还可以考虑简单的数据绑定库:

https://github.com/ko5tik/jsonserializer

(罐子可从 maven central 获得)

有了它,JSON 的解析就变成了这样:

https://github.com/ko5tik/accmeter/blob/master/src/main/java/de/pribluda/android/accmeter/file/SampleReader.java

(只需提供 java.io.Reader 和类来填写字段)

于 2012-08-28T18:44:26.870 回答