Jsonデータ取得と解析の入門
Jsonデータの取得と解析は以前から実現されていましたが、ずっとまとめる時間がなくて、今日はちょうどこの時間がありました.だからまとめてみましょう.
まずandroidのjson解析部分はすべてorg.jsonでは、主に以下のクラスがあります.
JSONObject:JSONの定義に関する基本単位であり、ペア(Key/Value)の数値を含むjsonオブジェクトと見なすことができます.外部(External:toString()メソッドを適用して出力される数値)呼び出しに対する応答は、標準的な文字列(たとえば、{「JSON」:「Hello,World」}、最も外側は括弧で囲まれ、その中のKeyとValueは「:」で区切られている)として表されます.内部(Internal)の動作に対する動作フォーマットは、例えば、JSOnObjectのインスタンスを初期化し、内部のput()メソッドを参照して数値を追加する:new JSOnObject()である.put("JSON", "Hello, World!"),KeyとValueの間にはカンマ","で区切られています.Valueのタイプには、Boolean、JSOnArray、JSOnObject、Number、String、またはデフォルト値JSOnObjectがある.NULL object .
JSOnStringer:jsonテキスト構築クラスです.公式の説明によると、このクラスはJSON textの迅速かつ容易な作成を助けることができます.その最大の利点は,フォーマットの誤りによるプログラム異常を低減できることであり,このクラスを参照するとJSON構文規則(syntax rules)に従ってJSON textを自動的に厳密に作成できることである.JSOnStringerエンティティごとに1つのJSON textしか作成できません.その最大の利点は,フォーマットの誤りによるプログラム異常を低減できることであり,このクラスを参照するとJSON構文規則(syntax rules)に従ってJSON textを自動的に厳密に作成できることである.JSOnStringerエンティティごとに1つのJSON textしか作成できません.
JSOnArray:秩序化された数値のセットを表します.これをString出力(toString)に変換して表現する形式は、角カッコで囲まれ、数値はカンマで囲まれている」、「区切り([value 1,value 2,value 3]、短いコードを使ってフォーマットをより直感的に理解することができます).このクラスの内部にはクエリー動作もあり、get()とopt()の両方のメソッドはindexインデックスで指定した数値を返すことができ、put()メソッドは数値を追加または置換するために使用されます.同様に、このクラスのvalueタイプには、Boolean、JSOnArray、JSOnObject、Number、String、またはデフォルト値JSOnObjectが含まれる.NULL object.
JSONTokener:json解析クラス
JSONException:jsonで使用される例外
使用するクラスをいくつか理解した後、解析するJsonデータがどのようになっているかを見てみましょう.
では、次は直接コードをつけましょう.発見時間が長くて、少し知識点が忘れてしまいました.
まずandroidのjson解析部分はすべてorg.jsonでは、主に以下のクラスがあります.
JSONObject:JSONの定義に関する基本単位であり、ペア(Key/Value)の数値を含むjsonオブジェクトと見なすことができます.外部(External:toString()メソッドを適用して出力される数値)呼び出しに対する応答は、標準的な文字列(たとえば、{「JSON」:「Hello,World」}、最も外側は括弧で囲まれ、その中のKeyとValueは「:」で区切られている)として表されます.内部(Internal)の動作に対する動作フォーマットは、例えば、JSOnObjectのインスタンスを初期化し、内部のput()メソッドを参照して数値を追加する:new JSOnObject()である.put("JSON", "Hello, World!"),KeyとValueの間にはカンマ","で区切られています.Valueのタイプには、Boolean、JSOnArray、JSOnObject、Number、String、またはデフォルト値JSOnObjectがある.NULL object .
JSOnStringer:jsonテキスト構築クラスです.公式の説明によると、このクラスはJSON textの迅速かつ容易な作成を助けることができます.その最大の利点は,フォーマットの誤りによるプログラム異常を低減できることであり,このクラスを参照するとJSON構文規則(syntax rules)に従ってJSON textを自動的に厳密に作成できることである.JSOnStringerエンティティごとに1つのJSON textしか作成できません.その最大の利点は,フォーマットの誤りによるプログラム異常を低減できることであり,このクラスを参照するとJSON構文規則(syntax rules)に従ってJSON textを自動的に厳密に作成できることである.JSOnStringerエンティティごとに1つのJSON textしか作成できません.
JSOnArray:秩序化された数値のセットを表します.これをString出力(toString)に変換して表現する形式は、角カッコで囲まれ、数値はカンマで囲まれている」、「区切り([value 1,value 2,value 3]、短いコードを使ってフォーマットをより直感的に理解することができます).このクラスの内部にはクエリー動作もあり、get()とopt()の両方のメソッドはindexインデックスで指定した数値を返すことができ、put()メソッドは数値を追加または置換するために使用されます.同様に、このクラスのvalueタイプには、Boolean、JSOnArray、JSOnObject、Number、String、またはデフォルト値JSOnObjectが含まれる.NULL object.
JSONTokener:json解析クラス
JSONException:jsonで使用される例外
使用するクラスをいくつか理解した後、解析するJsonデータがどのようになっているかを見てみましょう.
{
"cityList": [
{
"lev": 1,
"id": "7",
"zoom": 8,
"lat": 25.22,
"lng": 116.75,
"message": " 2013 07 14 00 "
},
{
"lev": 1,
"id": "8",
"zoom": 8,
"lat": 26.38,
"lng": 117.39,
"message": " 2013 07 14 08 "
}
],
"stcdList": [
{
"lev": 1,
"cityId": "8",
"message": " 2013 07 14 08 ( )",
"stnm": " ",
"id": "144",
"isRelease": 1,
"content": " 。 0.5-1 105.4m , 0.9m, 。",
"lng": 118.198,
"lat": 26.184,
"isFlash": 0
},
{
"lev": 1,
"cityId": "9",
"message": " 2013 06 29 11 ( )",
"stnm": " ",
"id": "140",
"isRelease": 1,
"content": "06 29 11 。 2013 6 29 20 226.0~226.2m, 1.0~1.2m。",
"lng": 118.534,
"lat": 27.918,
"isFlash": 0
},
{
"lev": 1,
"cityId": "9",
"message": "2013 06 29 10 ( )",
"stnm": " ",
"id": "139",
"isRelease": 1,
"content": " 。 2013 6 29 11 202.1~202.3m, 0.1~0.3m。",
"lng": 118.032,
"lat": 27.752,
"isFlash": 0
}
]
}
では、次は直接コードをつけましょう.発見時間が長くて、少し知識点が忘れてしまいました.
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
public class JsonParse {
public ArrayList<Double> lat = new ArrayList<Double>();//
public ArrayList<Double> lng = new ArrayList<Double>();//
public ArrayList<Integer> lev = new ArrayList<Integer>();//
public ArrayList<String> stnm = new ArrayList<String>();//
public ArrayList<String> content = new ArrayList<String>();//
public ArrayList<Integer> isRelease = new ArrayList<Integer>();// ,1
public void JsonParser() {
try {
// Json
String url = "http://www.fjsw.gov.cn/webPages/hsyjsys/json_hsyjHistory.aspx";
JSONObject jsonObject;
jsonObject = doGet(url);
// Json
JSONArray jsonArray = jsonObject.getJSONArray("stcdList");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = (JSONObject) jsonArray.opt(i);
lat.add(json.getDouble("lat"));
lng.add(json.getDouble("lng"));
lev.add(json.getInt("lev"));
stnm.add(json.getString("stnm"));
isRelease.add(json.getInt("isRelease"));
content.add(json.getString("content"));
Log.i("JSONParse-->", "lat :" + json.getDouble("lat"));
Log.i("JSONParse-->", "lng :" + json.getDouble("lng"));
Log.i("JSONParse-->", "lev :" + json.getInt("lev"));
Log.i("JSONParse-->", "stnm :" + json.getString("stnm"));
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static JSONObject doGet(String url) {
try {
String result = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = httpClient.execute(request);
result = EntityUtils.toString(response.getEntity());
JSONObject object = new JSONObject(result);
// Log.i("HttpActivity", result);
return object;
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
}
コードは簡単で、httpでurlのjsonデータを取得した後、jsonデータに必要な端点を直接解析すればよいので、いわゆる最初から最後まで上から下までの1級1級滴を解析する必要はありません.私は最初から研究してその誤区に入ったが,本当に腹立たしい.皆さんに少しでも助けてほしいですね.