您的位置:首页 > 移动开发 > Objective-C

JsonObject生成Json字符串,并且解析为对象-----JsonReader解析Json字符串

2016-05-31 15:42 573 查看
MainActivity

package com.example.gsondemo;

import java.io.IOException;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
private String jsonDate = "["
+ "{\"id\": 912345678901,"
+ "\"text\":\"How do I read JSON onAndroid?\","
+ "\"geo\":null,"
+"\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"
+ "{\"id\": 912345678902,"
+ "\"text\":\"@android_newb just useandroid.util.JsonReader!\","
+ "\"geo\":[50.454722,-104.606667],"
+"\"user\":{\"name\":\"jesse\",\"followers_count\":2}}"
+ "]";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

try {
/**
* 1、JsonReader解析json字符串,根据需求生成对象
*/
new JsonUtils().parseJson(jsonDate);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
/**
* 2、JsonObject生成json字符串
*/
String createJson = createJson();
Log.i("TAG", "createJson:::" + createJson);
/**
* 3、JsonObject解析json字符串
*/
pareJson(createJson);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* 1、生成Json字符串
* {"intKey":123,"doubleKey":10.1,"longKey":666666666,"stringKey":"lalala",
* "booleanKey"
* :true,"arrayKey":[111,"second"],"innerObjectKey":{"innerStr":"inner"}}
*/
private String createJson() throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("intKey", 123);
jsonObject.put("doubleKey", 10.1);
jsonObject.put("longKey", 666666666);
jsonObject.put("stringKey", "lalala");
jsonObject.put("booleanKey", true);

JSONArray jsonArray = new JSONArray();
jsonArray.put(111);
jsonArray.put("second");
jsonObject.put("arrayKey", jsonArray);

JSONObject innerJsonObject = new JSONObject();
innerJsonObject.put("innerStr", "inner");
jsonObject.put("innerObjectKey", innerJsonObject);

return jsonObject.toString();
}

private void pareJson(String jsonStr) throws JSONException {
JSONObject jsonObject = new JSONObject(jsonStr);
int intValue = jsonObject.optInt("intKey");
double doubleValue = jsonObject.optDouble("doubleKey");
long longValue = jsonObject.optLong("longKey");
String strValue = jsonObject.optString("stringKey");
boolean boolValue = jsonObject.optBoolean("booleanKey");

JSONArray array = jsonObject.optJSONArray("arrayKey");
int arrIntValue = array.optInt(0);
String arrStrValue = array.optString(1);

JSONObject innerJson = jsonObject.optJSONObject("innerObjectKey");
String innerStr = innerJson.optString("innerStr");

Log.e("Json", "intValue = " + intValue + " , doubleValue = "
+ doubleValue + " , longValue = " + longValue
+ " , strValue = " + strValue + " , booleanValue = "
+ boolValue + " , arrIntValue = " + arrIntValue
+ " , arrStrValue = " + arrStrValue + " , innerStr = "
+ innerStr);
}
}


JsonUtils

package com.example.gsondemo;

import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
import android.util.JsonToken;
import android.util.Log;

public class JsonUtils {
/**
* [
{
"id": 912345678901,
"text": "How do I read JSON on Android?",
"geo": null,
"user": {
"name": "android_newb",
"followers_count": 41
}
},
{
"id": 912345678902,
"text": "@android_newb just useandroid.util.JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]
*/
public void parseJson(String jsonDate) throws IOException {
// 创建JsonReader对象
JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
jsReader.beginArray();
while (jsReader.hasNext()) {
readMessage(jsReader);
}
jsReader.endArray();

}

public void readMessage(JsonReader jsReader) throws IOException {
jsReader.beginObject();
while (jsReader.hasNext()) {
String tagName = jsReader.nextName();
if (tagName.equals("id")) {
Log.i("TAG", "name:" + jsReader.nextLong());
} else if (tagName.equals("text")) {
Log.i("TAG", "text:" + jsReader.nextString());
} else if (tagName.equals("geo")
&& jsReader.peek() != JsonToken.NULL) {
readDoubleArray(jsReader);
} else if (tagName.equals("user")) {
readUser(jsReader);
} else {
// 跳过当前值
jsReader.skipValue();
Log.i("TAG", "skip======>");
}
}
jsReader.endObject();
}

// 解析geo中的数据
public void readDoubleArray(JsonReader jsReader) throws IOException {
jsReader.beginArray();
while (jsReader.hasNext()) {
Log.i("TAG", "readDoubleArray:" + jsReader.nextDouble());
}
jsReader.endArray();
}

/**
*
* "user": { "name": "jesse", "followers_count": 2 } 由于读取user中的数据
*
* @param jsReader
* @throws IOException
*/
public void readUser(JsonReader jsReader) throws IOException {
String userName = null;
int followsCount = -1;

jsReader.beginObject();
while (jsReader.hasNext()) {
String tagName = jsReader.nextName();
if (tagName.equals("name")) {
userName = jsReader.nextString();
Log.i("TAG", "user_name:" + userName);
} else if (tagName.equals("followers_count")) {
followsCount = jsReader.nextInt();
Log.i("TAG", "followers_count:" + followsCount);
}
}
jsReader.endObject();
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: