0

Json形式のサーバーからのデータを解析しているだけです。行き詰まりました。さらに進む方法がわかりません。

JSONObject object1 = new JSONObject(str);
String s1 = object1.getString("results");
JSONArray array1 = object1.getJSONArray("constituencies");

上記のコードは正しいですか?

4

2 に答える 2

0

次の JSON 解析コードを見てください。

public class ParseJSON extends Activity {

/** Called when the activity is first created. */

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    String readTwitterFeed = readTwitterFeed();
    try {
      JSONArray jsonArray = new JSONArray(readTwitterFeed);
      Log.i(ParseJSON.class.getName(),
          "Number of entries " + jsonArray.length());
      for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public String readTwitterFeed() {
    StringBuilder builder = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/vogella.json");
    try {
      HttpResponse response = client.execute(httpGet);
      StatusLine statusLine = response.getStatusLine();
      int statusCode = statusLine.getStatusCode();
      if (statusCode == 200) {
        HttpEntity entity = response.getEntity();
        InputStream content = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
        String line;
        while ((line = reader.readLine()) != null) {
          builder.append(line);
        }
      } else {
        Log.e(ParseJSON.class.toString(), "Failed to download file");
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return builder.toString();
  }
} 

JSON の記述は非常に簡単です。JSONObject または JSONArray を作成し、 toString() メソッドを使用するだけです。

public void writeJSON() {
  JSONObject object = new JSONObject();
  try {
    object.put("name", "Jack Hack");
    object.put("score", new Integer(200));
    object.put("current", new Double(152.32));
    object.put("nickname", "Hacker");
  } catch (JSONException e) {
    e.printStackTrace();
  }
  System.out.println(object);
}

元のソース

于 2013-03-29T08:19:10.567 に答える
0

上記のコードは正しいか間違っていますか??

ソースを見てください:

{
   "results":{
      "constituencies":[

      ],
      "members":[
         {
            "constituency_name":"Beckenham",
            "member_name":"Bob Stewart",
            "member_party":"Conservative",
            "member_biography_url":"http://www.parliament.uk/biographies/commons/Bob-Stewart/3919",
            "member_website":"http://www.bobstewartmp.com/",
            "uri":"http://findyourmp.parliament.uk/constituencies/beckenham.json"
         },
         {
            "constituency_name":"Colchester",
            "member_name":"Sir Bob Russell",
            "member_party":"Liberal Democrat",
            "member_biography_url":"http://www.parliament.uk/biographies/commons/Sir-Bob-Russell/35",
            "member_website":"http://www.bobrussell.org.uk",
            "uri":"http://findyourmp.parliament.uk/constituencies/colchester.json"
         },
      ]
   }
}

ここに2つありJSONObjectます:

  • まず(ソース全体)
  • 結果

結果には (このコード スニペットでは) 2 つが含まれますJSONArrays

  • Constituencies (空の配列)
  • メンバー (2 つの子を持つ)

したがって、最初に全体を取得してから結果を取得する必要がありJSON、その後配列にアクセスできます。

JSONObject root = new JSONObject(str); // whole source
JSONObject results = root.getJSONObject("results");

JSONArray constituenciesArr = results.getJSONArray("constituencies");
JSONArray membersArr = results.getJSONArray("members");
JSONObject child = null;
for (int i = 0; i < membersArr.length(); i++) {
   child = membersArr.getJSONObject(i);
   String mName = child.getString("member_name");
   ...

}
于 2013-03-29T08:19:22.443 に答える