Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何解析json类似的内部对象?_Android_Json_Parsing - Fatal编程技术网

Android 如何解析json类似的内部对象?

Android 如何解析json类似的内部对象?,android,json,parsing,Android,Json,Parsing,我有以下代码 {"sports" :[{"name" :"baseball","id" :1,"links" :{"api" :{"sports" :{"href" :"http://api.espn.com/v1/sports/baseball"},"news" :{"href" :"http://api.espn.com/v1/sports/baseball/news"},"notes" :{"href" :"http://api.espn.com/v1/sports/baseball/ne

我有以下代码

{"sports" :[{"name" :"baseball","id" :1,"links" :{"api" :{"sports" :{"href" :"http://api.espn.com/v1/sports/baseball"},"news" :{"href" :"http://api.espn.com/v1/sports/baseball/news"},"notes" :{"href" :"http://api.espn.com/v1/sports/baseball/news/notes"},"headlines" :{"href" :"http://api.espn.com/v1/sports/baseball/news/headlines"},"events" :{"href" :"http://api.espn.com/v1/sports/baseball/events"}}},"leagues" :[{"name" :"Major League Baseball","abbreviation" :"mlb","id" :10,"groupId" :9,"shortName" :"MLB","season" :{"year" :2012,"type" :2,"description" :"regular","startDate" :"2012-03-27T19:00:00Z","endDate" :"2012-10-05T06:59:59Z"},"week" :{"number" :23,"startDate" :"2012-08-28T19:00:00Z","endDate" :"2012-09-04T18:59:00Z"}}]}],"timestamp" :"2012-08-30T18:01:29Z","status" :"success"}
我想解析json对象,在sports object中,我们有另一个sports对象,如何用元素数组解析内部json对象

我正在使用以下代码进行尝试:

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);
}}



ublic class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();           

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;
}}
公共类BaseballActivity扩展了ListActivity{
专用静态字符串url=”http://api.espn.com/v1/sports/baseball?apikey=h29yphwtf7893hktfbn7cd5g";
私有静态最终字符串标记_SPORTS=“SPORTS”;
私有静态最终字符串标记\u ID=“ID”;
私有静态最终字符串标记\u TIMESTAMP=“TIMESTAMP”;
私有静态最终字符串标记_NAME=“NAME”;
私有静态最终字符串标记_NEWS=“NEWS”;
私有静态最终字符串标记_HEADLINES=“HEADLINES”;
私有静态最终字符串标记_LINKS=“LINKS”;
私有静态最终字符串标记_API=“API”;
私有静态最终字符串标记_SPORTS1=“sports”;
私有静态最终字符串标记_HREF=“HREF”;
JSONArray sports=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//ListView的HashMap
ArrayList sportsList=新建ArrayList();
//创建Json解析器实例
JSONParser jParser=新的JSONParser();
//从url获取Json字符串
JSONObject json=jParser.getJSONFromUrl(url);
试一试{
//获取联系人数组
sports=json.getJSONArray(TAG_sports);
//通过所有触点循环
对于(int i=0;i

当我试图解析内部对象时,可以显示名称和id。没有输出,请帮助我。

您应该有一个包含JSON字符串中的对象的类Sports

比这更适合你

JSONObject jObject=新的JSONObject(json); jObject.getJSONObject(“运动”)

这将使JsonString成为JSONOBJECT 然后,您将使用谷歌Gson库执行以下操作

Gson Gson=新的Gson(); Sports-Sports=gson.fromJson(jObject.toString(),Sports.class)


我建议您使用一个类来处理所有的WebRequisitions,而不要在您的活动中使用此代码。这会使您的项目更加结构化,您的代码也会更加清晰

您能帮我提供示例代码或任何链接吗,我是Android的新手,这里是使用Google Gson的文档,这里是Json的站点,但是如果按照我在上面提到的步骤去做的话,它应该可以做到