android json解析三种方式哪种效率最高

 我来答
08物理
2015-10-28 · 知道合伙人软件行家
08物理
知道合伙人软件行家
采纳数:1141 获赞数:4137
1、国内上市公司资深运维工程师、产品经理 2、百度芝麻将,认证管理员

向TA提问 私信TA
展开全部
用org.json以及谷歌提供gson来解析json数据的方式更好一些。

安卓下通常采用以下几种方式解析json数据:
1、org.json包(已经集成到android.jar中了)
2、google提供的gson库
3、阿里巴巴的fastjson库
4、json-lib

以Google出品的Gson为例,具体步骤为:
1、首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar copy到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());
huanglenzhi
推荐于2016-05-30 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  一、什么是JSON?
  JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
  JSON就是一串字符串 只不过元素会使用特定的符号标注。

  {} 双括号表示对象

  [] 中括号表示数组

  "" 双引号内是属性或值

  : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

  所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

  而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

  当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象

  二、JSON解析之传统的JSON解析
  1、生成JSOn字符串
  public static String createJsonString(String key, Object value) {
  JSONObject jsonObject = new JSONObject();
  jsonObject.put(key, value);
  return jsonObject.toString();
  }

  2、解析JSON字符串
  分为以下三种情况,一个JavaBean,一个List数组,一个嵌套Map的List数组:
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;

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

  import com.android.myjson.domain.Person;

  /**
  * 完成对json数据的解析
  *
  */
  public class JsonTools {

  public static Person getPerson(String key, String jsonString) {
  Person person = new Person();
  try {
  JSONObject jsonObject = new JSONObject(jsonString);
  JSONObject personObject = jsonObject.getJSONObject("person");
  person.setId(personObject.getInt("id"));
  person.setName(personObject.getString("name"));
  person.setAddress(personObject.getString("address"));
  } catch (Exception e) {
  // TODO: handle exception
  }
  return person;
  }

  public static List getPersons(String key, String jsonString) {
  List list = new ArrayList();
  try {
  JSONObject jsonObject = new JSONObject(jsonString);
  // 返回json的数组
  JSONArray jsonArray = jsonObject.getJSONArray(key);
  for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject jsonObject2 = jsonArray.getJSONObject(i);
  Person person = new Person();
  person.setId(jsonObject2.getInt("id"));
  person.setName(jsonObject2.getString("name"));
  person.setAddress(jsonObject2.getString("address"));
  list.add(person);
  }
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }

  public static List getList(String key, String jsonString) {
  List list = new ArrayList();
  try {
  JSONObject jsonObject = new JSONObject(jsonString);
  JSONArray jsonArray = jsonObject.getJSONArray(key);
  for (int i = 0; i < jsonArray.length(); i++) {
  String msg = jsonArray.getString(i);
  list.add(msg);
  }
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }

  public static List> listKeyMaps(String key,
  String jsonString) {
  List> list = new ArrayList>();
  try {
  JSONObject jsonObject = new JSONObject(jsonString);
  JSONArray jsonArray = jsonObject.getJSONArray(key);
  for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject jsonObject2 = jsonArray.getJSONObject(i);
  Map map = new HashMap();
  Iterator iterator = jsonObject2.keys();
  while (iterator.hasNext()) {
  String json_key = iterator.next();
  Object json_value = jsonObject2.get(json_key);
  if (json_value == null) {
  json_value = "";
  }
  map.put(json_key, json_value);
  }
  list.add(map);
  }
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }
  },>,>三、JSON解析之GSON
  1、生成JSON字符串
  import com.google.gson.Gson;

  public class JsonUtils {

  public static String createJsonObject(Object obj) {
  Gson gson = new Gson();
  String str = gson.toJson(obj);
  return str;

  }
  }二、解析JSON
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;

  import com.google.gson.Gson;
  import com.google.gson.reflect.TypeToken;

  ;
  public class GsonTools {

  public GsonTools() {
  // TODO Auto-generated constructor stub
  }

  /**
  * @param
  * @param jsonString
  * @param cls
  * @return
  */
  public static T getPerson(String jsonString, Class cls) {
  T t = null;
  try {
  Gson gson = new Gson();
  t = gson.fromJson(jsonString, cls);
  } catch (Exception e) {
  // TODO: handle exception
  }
  return t;
  }

  /**
  * 使用Gson进行解析 List
  *
  * @param
  * @param jsonString
  * @param cls
  * @return
  */
  public static List getPersons(String jsonString, Class cls) {
  List list = new ArrayList();
  try {
  Gson gson = new Gson();
  list = gson.fromJson(jsonString, new TypeToken>() {
  }.getType());
  } catch (Exception e) {
  }
  return list;
  }

  /**
  * @param jsonString
  * @return
  */
  public static List getList(String jsonString) {
  List list = new ArrayList();
  try {
  Gson gson = new Gson();
  list = gson.fromJson(jsonString, new TypeToken>() {
  }.getType());
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }

  public static List> listKeyMaps(String jsonString) {
  List> list = new ArrayList>();
  try {
  Gson gson = new Gson();
  list = gson.fromJson(jsonString,
  new TypeToken>>() {
  }.getType());
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }
  }

  三、JSON解析之FastJSON
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;

  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.TypeReference;

  public class JsonTool {

  public static T getPerson(String jsonstring, Class cls) {
  T t = null;
  try {
  t = JSON.parseObject(jsonstring, cls);
  } catch (Exception e) {
  // TODO: handle exception
  }
  return t;
  }

  public static List getPersonList(String jsonstring, Class cls) {
  List list = new ArrayList();
  try {
  list = JSON.parseArray(jsonstring, cls);
  } catch (Exception e) {
  // TODO: handle exception
  }
  return list;
  }

  public static List> getPersonListMap1(
  String jsonstring) {
  List> list = new ArrayList>();
  try {
  list = JSON.parseObject(jsonstring,
  new TypeReference>>() {
  }.getType());

  } catch (Exception e) {
  // TODO: handle exception
  }

  return list;
  }
  }

  总结:
  JSON对于移动设备来说,尤其对于网络环境较差和流量限制的情况下,相对于XML格式的数据传输会更节省流量,传输效率更高。在这三种解析方式中FastJson是效率最高的,推荐使用。

转载
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式