あなたが知らないJSONの高効率な使い方


1.JSON
JSONはJavaScript Object Notationの略語で、JavaScript標準のサブセットです.Android APIはすでにJSONデータの読み書きをサポートしています.このようなフォーマットは、バイナリデータが含まれていない複雑なオブジェクトを表しています.ある程度は、ネットワーク上でデータを共有するという事実上の基準にもなっています.
以下の例は簡単なJSON配列を示しています.3つのオブジェクトを含み、各オブジェクトはPeopleの情報を記憶しています.このようなフォーマットは、ネットワークサービス上でタスクを送るか、または直接友達の中でデータを共有するのに適しています.

{
「name」:「liyuanjiglyj」、
「age」:「22」、
「lon」:「12」
}
{
「name」:「fengxinyao」、
「age」:「24」、
「lon」:「22」
}
{
「name」:「hefan」、
「age」:「23」、
「lon」:「11」
)

InputStreamからJSONデータを読み出すには、Json Reader APIが一番いいです.以下のようにします.
public JSONArray readPeopleFromInputStream(InputStream inputStream){
    InputStreamReader reader=new InputStreamReader(inputStream);
    JsonReader jsonReader=new JsonReader(reader);
    JSONArray jsonArray=new JSONArray();
    try {
        jsonReader.beginArray();
        while(jsonReader.hasNext()){
            JSONObject jsonObject=readSingleJSON(jsonReader);
            jsonArray.put(jsonObject);
        }
        jsonReader.endArray();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return jsonArray;
}

private JSONObject readSingleJSON(JsonReader jsonReader)throws Exception{
    JSONObject jsonObject=new JSONObject();
    jsonReader.beginObject();
    JsonToken token;
    do{
        String name=jsonReader.nextName();
        if("name".equals(name)){
            jsonObject.put("name",jsonReader.nextString());
        }else if("age".equals(name)){
            jsonObject.put("age",jsonReader.nextString());
        }else if("lon".equals(name)){
            jsonObject.put("lon",jsonReader.nextString());
        }
        token=jsonReader.peek();
    }while(token!=null&&!token.equals(JsonToken.END_OBJECT));
    jsonReader.endObject();
    return jsonObject;
}
          InputStream         String ,    JSONArray     ,           ,       。  ,JsonWriter   OutputStream     JSON  ,    :
public void writePeopleJSON(JSONArray jsonArray,OutputStream outputStream) throws Exception {
    OutputStreamWriter write=new OutputStreamWriter(outputStream);
    JsonWriter jsonWrite=new JsonWriter(write);
    int arrayLength=jsonArray.length();
    jsonWrite.beginArray();
    for (int i = 0; i < arrayLength; i++) {
        JSONObject jsonObject= (JSONObject) jsonArray.get(i);
        jsonWrite.beginObject();
        jsonWrite.name("name").value(jsonObject.getString("name"));
        jsonWrite.name("age").value(jsonObject.getString("age"));
        jsonWrite.name("lon").value(jsonObject.getString("lon"));
        jsonWrite.endObject();
    }
    jsonWrite.endArray();
    jsonWrite.close();
}
    
2.Gsonを いた JSON
    JSONObject JSONArray        ,          ,               。  ,            ,  JsonReader JsonWriteer          。       JSON            ,          Gson。
    Gson      Java  (Plain Old Object,POJO)   JSON,    。                  Java  ,  get set  ,       Gson 。
                    Java  :
public class People {
    private String name;
    private String age;
    private String lon;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public void setLon(String lon) {
        this.lon = lon;
    }

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }

    public String getLon() {
        return lon;
    }
}
の のコードは、Collection<People>オブジェクトのセットをどのように み って き むかを している.プログレッシブ は に なJSONデータですので、JSON のデータをWebサービスに する に するのが です. もサーバー のコードを しており、Java を に うと、サーバ とAndroidアプリケーション で じJavaコードのセットを に することができます.
public Collection<People> readPeopleFromStream(InputStream inputStream){
    InputStreamReader reader=new InputStreamReader(inputStream);
    Gson gson=new Gson();
    Type type=new TypeToken<Collection<People>>(){}.getType();
    return gson.fromJson(reader,type);
}

public void writePeopleToStream(Collection<People> peoples,OutputStream outputStream) throws IOException {
    OutputStreamWriter write=new OutputStreamWriter(outputStream,"UTF-8");
    com.google.gson.stream.JsonWriter jsonWrite= new com.google.gson.stream.JsonWriter(write);
    Gson gson=new Gson();
    Type type=new TypeToken<Collection<People>>(){}.getType();
    gson.toJson(peoples,type,jsonWrite);
    Log.i("MainActivity", "GSON");
    jsonWrite.flush();
    jsonWrite.close();
}
はまた のGSONパッケージを します.プログラマの にダウンロードしてください. ファイルを してください.GSON パッケージ