androidjson解析三种方式哪种效率最高

author author     2023-04-23     170

关键词:

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

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

androidjson数据解析(gson方式)

要创建和解析JSON数据,也可以使用GSON来完成。GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用GSON,可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的JSON数据。 1.GSON的... 查看详情

java有几种文件拷贝方式,哪一种效率最高?

常见的有三种文件拷贝方式      io下的包会把数据从内核态拷贝到用户态,nio下的包则可以避免不必要的拷贝和上下文切换提高数据拷贝的效率。作者:​​你的雷哥​​ 查看详情

androidjson解析kotlin

   前面写了一次kotlin解析json但是,真的写得太烂,直接删掉了,现在重新整理一下。顺便记录一下今天坑了我很久的小问题。   1.首先从最简单的入手吧  一个json的字符串:=====就叫做jsonString吧 {    "code":... 查看详情

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

...va.util.ArrayList;importjava.util.Iterator;importjava.util.List;/***list的三种遍历*@authorOwner**/publicclassListTestpublicstaticvoidmain(String[]args)List<String>list=newArrayList<String>();list.add("a");list.add("b");list.add("c");list.add("c&quo 查看详情

androidjson解析fastjson和gson的使用

Useruser=newUser();user.setPhone("11111111");user.setNmae("张三");user.setPhone("twtwtwtwtwtwtwtwtwtwtwtwtwtwtwtwtw");List<User>users=newArrayList<>();users.add(user);users.add(user);users.a 查看详情

androidjson解析多个对象(代码片段)

我有这样的JSON:"Temperature":"Name":"Temperature","Value":"26.19","Unit":"C","Humidity":"Name":"Humidity","Value":"29.38%","Unit":"%"我想将它保存到相同类型的对象列表中。这是我的班级:publicclassMeasurementprivateStringname; 查看详情

扯一把spring的三种注入方式,到底哪种注入方式最佳?(代码片段)

文章目录1.实例的注入方式1.1属性注入1.2set方法注入1.3构造方法注入2.实例注入方式大PK3.小结循环依赖这个问题,按理说我们在日常的程序设计中应该避免,其实这个本来也是能够避免的。不过由于总总原因,我们可... 查看详情

qt中三种解析xml的方式

在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码。虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面三种解析xml采用相同的原理... 查看详情

java中list对象的三种遍历方式

1.增强for循环for(Stringstr:list){//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用。System.out.println(str);}2.普通for循环for(inti=0;i<list.size();i++){//内部不锁定,效率最高,但在多线程要考虑并发操作... 查看详情

androidjson解析架包(阿里巴巴的fastjson)处理是报异常。

异常显示:com.alibaba.fastjson.JSONException:exepct'[',but怎么解决。参考技术A应该是json字符串的格式有问题吧,先找找看有问题没有,没有的话再看解析的时候哪里有逻辑问题没有,不行就把报错的那几行代码和json字符串贴出来... 查看详情

解析xml文件的三种方式及其特点

解析Xml文件的三种方式1、Sax解析(simpleapi forxml)  使用流式处理的方式,它并不记录所读内容的相关信息。它是一种以事件为驱动的XMLAPI,解析速度快,占用内存少。使用回调函数来实现。 1classMyDefaultHanderextendsDefault... 查看详情

python解析参数的三种方法

...parse,它是一个流行的Python模块,专门用于命令行解析;另一种方法是读取JSON文件,我们可以在其中放 查看详情

androidjson文件解析为类对象出现以下错误,求解答。

Causedby:java.lang.IllegalStateException:ExpectedBEGIN_OBJECTbutwasSTRINGatline1column123JSON文件:"Data":"uid":19880890,"token":"d8dc52ba46e84685ab5549c01764dd9b","name":"benlixmu@gmail.com","Detail":"登入成功",&... 查看详情

三种数据解析方式(代码片段)

第一种:xpath使用流程:下载:pipinstalllxml导包:fromlxmlimportetree创建etree对象进行指定数据的解析        本地:etree=etree.parse(‘本地文件路径‘)               e 查看详情

androidjson处理框架

1、Android中的Json解析工具fastjson、序列化、反序列化2、AndroidGson的使用总结3、Android-JSONTool 一个简易的Json框架类,小到只有一个类   有时为了简化代码的大小,尽可能的压缩apk的大小。就不能再使用大而全的框架... 查看详情

java解析xml的几种方式哪种最好?

参考技术A(1)DOM解析DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取;(2)SAX(SimpleAPIforXML)解析流模型中的"推"模型分析方式。通过事件驱动,每发现一个节... 查看详情

json的三种解析方式

http://www.cnblogs.com/zhujiabin/p/5498272.html一、什么是JSON?JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。JSON就是一串字符串只不过元素会使用特定的... 查看详情

爬虫-三种数据解析方式(代码片段)

...为重要的一步,就是在持久化存储之前需要进行指定数据解析。因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据。因此,本次课程中会给大家详细介绍讲解... 查看详情