Android编程之json解析实例详解

2019-12-10 19:43:01于丽

除了上面的两个类,还可以使用JSONStringer来构建json文本

try { 
  JSONStringer jsonText = new JSONStringer(); 
  // 首先是{,对象开始。object和endObject必须配对使用 
  jsonText.object(); 
  jsonText.key("phone"); 
  // 键phone的值是数组。array和endArray必须配对使用 
  jsonText.array(); 
  jsonText.value("12345678").value("87654321"); 
  jsonText.endArray(); 
  jsonText.key("name"); 
  jsonText.value("yuanzhifei89"); 
  jsonText.key("age"); 
  jsonText.value(100); 
  jsonText.key("address"); 
  // 键address的值是对象 
  jsonText.object(); 
  jsonText.key("country"); 
  jsonText.value("china"); 
  jsonText.key("province"); 
  jsonText.value("jiangsu"); 
  jsonText.endObject(); 
  jsonText.key("married"); 
  jsonText.value(false); 
  // },对象结束 
  jsonText.endObject(); 
} catch (JSONException ex) { 
  throw new RuntimeException(ex); 
}

json文本解析类JSONTokener

按照RFC4627规范将json文本解析为相应的对象。

对于将json文本解析为对象,只需要用到该类的两个api:

构造函数

public Object nextValue(); 
// { 
//   "phone" : ["12345678", "87654321"], // 数组 
//   "name" : "yuanzhifei89", // 字符串 
//   "age" : 100, // 数值 
//   "address" : { "country" : "china", "province" : "jiangsu" }, // 对象 
//   "married" : false // 布尔值 
// } 
private static final String JSON =  
"{" + 
  "  "phone" : ["12345678", "87654321"]," + 
  "  "name" : "yuanzhifei89"," + 
  "  "age" : 100," + 
  "  "address" : { "country" : "china", "province" : "jiangsu" }," + 
  "  "married" : false," + 
"}"; 
try { 
  JSONTokener jsonParser = new JSONTokener(JSON); 
  // 此时还未读取任何json文本,直接读取就是一个JSONObject对象。 
  // 如果此时的读取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String) 
  JSONObject person = (JSONObject) jsonParser.nextValue(); 
  // 接下来的就是JSON对象的操作了 
  person.getJSONArray("phone"); 
  person.getString("name"); 
  person.getInt("age"); 
  person.getJSONObject("address"); 
  person.getBoolean("married"); 
} catch (JSONException ex) { 
  // 异常处理代码 
}