android解析复杂json
Ⅰ android 解析json用那个包里面的方法比较好呢
android 解析json还有用Google出品的Gson比较好,具体步骤为:
1、首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(项目根目录新建一个libs文件夹)中。 可以使用以下两种方法解析JSON数据,通过获取JsonReader对象解析JSON数据。
代码如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson对象获取User对象数据进行相应的操作:
代码如下:
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:
代码如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
Ⅱ net.sf.json.JSONObject与Android自带的JSON解析类冲突怎么办
在Android中,由于类名相同,可能造成冲突,解决方案:
尽量使用同一个库下的JSON解析工具。
如果类型相同,但是包名不同,建议使用完整的包名+类名定义变量,例如java中,java.sql.Date和java.uitl.Date两个都是Date类,但是怎么区分呢,就可以通过包名+类名来区分:
java.sql.Date date1 = new java.sql.Date();
java uitl.Date date2 = new java.uitl.Date();
JSONObject也一样,可以使用这种方式。
Android中,json的解析,建议使用google提供的Gson这个开源库,json的解析或者对象与json转换,只需要一行代码。
Gson gson = new Gson();
gson.toJson(object); gson.fromJson(json.Object.class);