配列名なしでJSONArrayを取得する?
質問
私はJSONの初心者で、このチュートリアルを試しています。 http://p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/#comments
私はJSON、C言語、Java、またAndroidの初心者ですが、勉強中です。 チュートリアルでは、私が名前付き配列と呼んでいるものを使用していますが、私のアンドロイド プロジェクトで使用する予定のすべての JSON は、名前付き配列のない単純なテーブル行を使用します。 私が使用しているJSONとチュートリアルの地震のJSONの例は以下のとおりです。
チュートリアルでは、以下のコードを使用して、地震の配列を繰り返し、JAVAのハッシュマップリストに変換しています。
JSONArray earthquakes = json.getJSONArray("earthquakes");
for(int i=0;i<earthquakes.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = earthquakes.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("name", "Earthquake name:" + e.getString("eqid"));
map.put("magnitude", "Magnitude: " + e.getString("magnitude"));
mylist.add(map);
}
質問ですが、どのようにすれば
json.getJSONArray("")
を使用できますか? 私は残りのコードを変換することができます、私はちょうどそのJSONをロードする方法を知る必要があります。
getJSONArray("strJsonArrayName")
がない場合は
strJsonArrayName
.
私のJSON(無名配列)
[
{
"cnt":1,
"name":"American",
"pk":7
},
{
"cnt":2,
"name":"Celebrities",
"pk":3
},
{
"cnt":1,
"name":"Female",
"pk":2
},
{
"cnt":1,
"name":"Language",
"pk":8
},
{
"cnt":1,
"name":"Male",
"pk":1
},
{
"cnt":1,
"name":"Region",
"pk":9
}
]
チュートリアルのJSON(名前付き配列)
{
"earthquakes":[
{
"eqid":"c0001xgp",
"magnitude":8.8,
"lng":142.369,
"src":"us",
"datetime":"2011-03-11 04:46:23",
"depth":24.4,
"lat":38.322
},
{
"eqid":"c000905e",
"magnitude":8.6,
"lng":93.0632,
"src":"us",
"datetime":"2012-04-11 06:38:37",
"depth":22.9,
"lat":2.311
},
{
"eqid":"2007hear",
"magnitude":8.4,
"lng":101.3815,
"src":"us",
"datetime":"2007-09-12 09:10:26",
"depth":30,
"lat":-4.5172
},
{
"eqid":"c00090da",
"magnitude":8.2,
"lng":92.4522,
"src":"us",
"datetime":"2012-04-11 08:43:09",
"depth":16.4,
"lat":0.7731
},
{
"eqid":"2007aqbk",
"magnitude":8,
"lng":156.9567,
"src":"us",
"datetime":"2007-04-01 18:39:56",
"depth":10,
"lat":-8.4528
},
{
"eqid":"2007hec6",
"magnitude":7.8,
"lng":100.9638,
"src":"us",
"datetime":"2007-09-12 21:49:01",
"depth":10,
"lat":-2.5265
},
{
"eqid":"a00043nx",
"magnitude":7.7,
"lng":100.1139,
"src":"us",
"datetime":"2010-10-25 12:42:22",
"depth":20.6,
"lat":-3.4841
},
{
"eqid":"2010utc5",
"magnitude":7.7,
"lng":97.1315,
"src":"us",
"datetime":"2010-04-06 20:15:02",
"depth":31,
"lat":2.3602
},
{
"eqid":"2009mebz",
"magnitude":7.6,
"lng":99.9606,
"src":"us",
"datetime":"2009-09-30 08:16:09",
"depth":80,
"lat":-0.7889
},
{
"eqid":"2009kdb2",
"magnitude":7.6,
"lng":92.9226,
"src":"us",
"datetime":"2009-08-10 17:55:39",
"depth":33.1,
"lat":14.0129
}
]
}
チュートリアルでは、@MДΓ БДLL と @Cody Caughlan からの回答に基づいて、JSONFunctions.getJSONFromURL を JSONObject の代わりに JSONArray に再フォーマットすることが出来ました。 以下は、私の修正された作業コードです。
public class JSONfunctions {
public static JSONArray getJSONfromURL(String url){
InputStream is = null;
String result = "";
JSONArray jArray = null;
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
is = entity.getContent();
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();
result=sb.toString();
jArray = new JSONArray(result);
return jArray;
}
}
どのように解決するのですか?
を呼び出す必要はありません。
json.getJSONArray()
を呼び出す必要はありません。なぜなら、あなたが扱っているJSONはすでに
は
であり、配列だからです。のインスタンスを構築してはいけません。
JSONObject
のインスタンスを作成してはいけません。
JSONArray
. これで十分でしょう。
// ...
JSONArray json = new JSONArray(result);
// ...
for(int i=0;i<json.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = json.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("name", "Earthquake name:" + e.getString("eqid"));
map.put("magnitude", "Magnitude: " + e.getString("magnitude"));
mylist.add(map);
}
チュートリアルと全く同じメソッドを使うことはできません。なぜなら、扱うJSONはパースされて
JSONArray
ではなく、ルートで
JSONObject
.
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない