欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于java解析JSON的三种方式详解

程序员文章站 2024-03-09 16:18:23
本文实例分析了基于java解析json的三种方式。分享给大家供大家参考,具体如下: 一、什么是json? json是一种取代xml的数据结构,和xml相比,它更小巧但描...

本文实例分析了基于java解析json的三种方式。分享给大家供大家参考,具体如下:

一、什么是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;
  }
}

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

ps:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用:

在线json代码检验、检验、美化、格式化工具:

json在线格式化工具:

在线xml/json互相转换工具:

json代码在线格式化/美化/压缩/编辑/转换工具:

在线json压缩/转义工具:

c语言风格/html/css/json代码格式化美化工具:

希望本文所述对大家java程序设计有所帮助。