Android JSON解析及简单例子(2)

getType和optType api的使用

getType可以将要获取的键的值转换为指定的类型,如果无法转换或没有值则抛出JSONException

optType也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户提供或这默认提供的值 

代码

try { 
    // 所有使用的对象都是用上面创建的对象 
    // 将第一个电话号码转换为数值和将名字转换为数值 
    phone.getLong(0); 
    person.getLong("name"); // 会抛异常,因为名字无法转换为long       
    phone.optLong(0); // 代码内置的默认值 
    phone.optLong(0, 1000); // 用户提供的默认值 
    person.optLong("name"); 
    person.optLong("name", 1000); // 不像上面那样抛异常,而是返回1000 
} catch (JSONException ex) { 
    // 异常处理代码 

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

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) { 
    // 异常处理代码 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/68ad370ed86aaada0ab6f6fd1bf703ff.html