【问题标题】:How to parse Inner json objects arrays如何解析内部 json 对象数组
【发布时间】:2012-08-30 12:43:44
【问题描述】:

我正在使用 ESPN 体育 API。谁能帮我解析一下?

我正在粘贴我的代码,我只能解析名称和 ID——请帮助如何解析内部对象项。

public class BaseballActivity extends ListActivity{

private static String url = "http://api.espn.com/v1/sports/baseball?apikey=h29yphwtf7893hktfbn7cd5g";

private static final String TAG_SPORTS = "sports";
private static final String TAG_ID = "id";
private static final String TAG_TIMESTAMP = "timestamp";
private static final String TAG_NAME = "name";
private static final String TAG_NEWS = "news";
private static final String TAG_HEADLINES = "headlines";
private static final String TAG_LINKS = "links";
private static final String TAG_API = "api";
private static final String TAG_SPORTS1 = "sports";
private static final String TAG_HREF = "href";

JSONArray sports = null;

@Override
public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // HashMap for ListView

    ArrayList<HashMap<String, String>> sportsList = new ArrayList<HashMap<String, String>>();

    // creating Json parser instance
    JSONParser jParser = new JSONParser();

    // getting Json String from url

    JSONObject json = jParser.getJSONFromUrl(url);

    try{
        // Getting Array of Contacts
                    sports = json.getJSONArray(TAG_SPORTS);

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


            //String news = c.getString(TAG_NEWS);
           // String headlines = c.getString(TAG_HEADLINES);
            String name = c.getString(TAG_NAME);
           // String timestamp = c.getString(TAG_TIMESTAMP);
            String id = c.getString(TAG_ID);

         //   JSONObject links = c.getJSONObject(TAG_LINKS);
          //  JSONObject api = c.getJSONObject(TAG_API);
          //  JSONObject sports = c.getJSONObject(TAG_SPORTS1);

         //   String href = c.getString(TAG_HREF);



            HashMap<String, String> map = new HashMap<String, String>();

         //  map.put(TAG_TIMESTAMP, timestamp);
            map.put(TAG_NAME, name);
           // map.put(TAG_NEWS, news);
           // map.put(TAG_HEADLINES, headlines);
            map.put(TAG_ID, id);
         //   map.put(TAG_HREF, href);
            sportsList.add(map);
         }
    }
        catch (JSONException e) {
            e.printStackTrace();    

        }


    ListAdapter adapter = new SimpleAdapter(this, sportsList,
            R.layout.list_item,
            new String[]{TAG_NAME,TAG_ID} , new int[] {
            R.id.id,R.id.name});

   setListAdapter(adapter);   
 }
}

这是我正在使用的链接

Sample Link

【问题讨论】:

  • 你为 JSONParser 使用什么库?

标签: android parsing json


【解决方案1】:

我建议您使用gson。对我来说,使用它更容易......

编辑:(一些示例代码)

  1. 下载 gson-2.2.2.jar 并将其添加到您的依赖项中

  2. 创建一个基类(当你使用多个请求时)

    public abstract class RequestBase {
    
    public String ToJson(){
        Gson gson = new Gson();
        return gson.toJson(this);
    }
    
    public abstract String getUrl();
    
    protected String getBaseUrl(){
        return //Your URL;
    }   
    }
    
  3. 创建一个将执行您的请求的类..

  4. 为请求和响应创建类。然后你可以用 getter 和 setter 输入它们:

    公共类 SomeRequest 扩展 RequestBase { @SerializedName("Parameter1") private int Parameter1;

    public void setParameter1(int Parameter1) {
        this.Parameter1= Parameter1;
    }
    
    public int getParameter1() {
        return Parameter1;
    }
    
    @Override
    public String getUrl() {
        return this.getBaseUrl() +"YOUR/OWN/URL" + Parameter1;
    }
    }
    

和

public class SomeResponse {
@SerializedName("responseParameter1")
private int responseParameter1;

@SerializedName("responseParameter2")
private String responseParameter2;

public void setResponseParameter1(int responseParameter1) {
    this.responseParameter1= responseParameter1;
}

public int getResponseParameter1() {
    return responseParameter1;
}

public void setResponseParameter2(String responseParameter2) {
    this.responseParameter2= responseParameter2;
}

public String getResponseParameter1() {
    return responseParameter2;
}
}

【讨论】:

  • @srikanth 更好?还是你想要更多?
  • 我正在尝试或举一个简单的例子,比如拥有三个或四个具有相同名称和相同项目的内部对象。因为我是 android 新手。
  • @srikanth 给我发一封电子邮件(我的个人资料中的电子邮件地址),然后我会给你一个更详细的例子(明天..)你觉得好吗?
  • 我可以看到您的网站,但您的邮件 ID 在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 2019-01-14
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多