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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android json解析三种方式哪种效率最高相关的知识,希望对你有一定的参考价值。

用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());
参考技术A   一、什么是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是效率最高的,推荐使用。

转载本回答被提问者和网友采纳

JSON的三种解析方式

http://www.cnblogs.com/zhujiabin/p/5498272.html

一、什么是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是效率最高的,推荐使用。

以上是关于android json解析三种方式哪种效率最高的主要内容,如果未能解决你的问题,请参考以下文章

java排序,效率高的是哪种排序方法

Java中哪个JSON库的解析速度是最快的

Android中使用Gson解析JSON数据的两种方法

json为啥解析为javabean

java中一下两种方式遍历数组哪种效率高?

Android JacksonGsonFastJson解析框架对比