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級滴を解析する必要はありません.私は最初から研究してその誤区に入ったが,本当に腹立たしい.皆さんに少しでも助けてほしいですね.