Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了FastJSON 简介及其Map/JSON/String 互转大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在日志解析,前后端数据传输交互中,经常会遇到 String 与 map、json、xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言、跨前后端的事实上的标准数据交互格式。应该来说各个语言中 解析 json 的库都一大片(具体 json 格式与三方库的介绍请见:http://www.json.org/json-zh.html),比如 python 都集成在了内置库中,成为标准 API,今天我们要聊的是 java 中如何方便的使用 json 格式。

从上面的链接介绍中我们可以看到,java 的三方 json 库是最多的,可谓百花齐放百家争鸣的节奏。。。但是,某些库存在链式依赖的问题,使用的时候要注意,如果你没用 maven 管你你的依赖,用起来会很痛苦,比如 json-lib、smart-json 等。下面我要推荐的是阿里巴巴工程师开源的一个 json 库:FastJSON,这个库在解析速度和易用性上来说都很不错。

1、了解fastjson

1.1 Fastjson介绍

Fastjson是一个Java语言编写的JSON处理器。
1、遵循http://json.org标准,为其官方网站收录的参实现之一。
2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。
4、开源,使用Apache License 2.0协议开源。

1.2 如果获得Fastjson?
https://github.com/alibaba/fastjson

2、主要的使用入口

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parSEObject(String text); // 把JSON文本parse成JSONObject    
public static final <T> T parSEObject(String text,Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text,136); font-style:italic">//把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object,Boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

3、有关类库的一些说明

serializeWriter:相当于StringBuffer

JSONArray:相当于List<Object>

JSONObject:相当于Map<String,Object>

JSON反序列化没有真正数组,本质类型都是List<Object>

4、fastjson还有很多很高级的特性

比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。

5、测试代码

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.serializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatserializer; 

import java.util.*; 

/** 
* Created by IntelliJ IDEA. 
* 
* @author leizhimin 11-11-22 上午9:15 
*/ 
public @H_403_119@class Foo { 
  private String vString = "vStringhehhehe"; 
  private char vchar = 'x'; 

  private byte vbyte = 64; 
  private short vshort = 128; 
  private int vint = 65535; 
  private long vlong = 9999999L; 

  private float vfloat = 12.1f; 
  private double vdouble = 22.203d; 

  private Boolean vBoolean = false; 

//	private Date vdate = new Date(); 
  private Date dddd = new Date(); 
  private Date vDate = new Date(); 
  private Date v_Date = new Date(); 
  private Object vnull = null; 

  private String[] avString = {"aaa","bbb",68)">"ccc"}; 
  private int[] avint = {1,2,153)">3,153)">4}; 
  private Boolean[] avBoolean = {true,false,true,true}; 

  private List<String> listString = new ArrayList<String>(); 
  private Map<String,String> map = new HashMap<String,String>(); 

  private Bar bar = new Bar(); 
  private Bar[] avBar = {new Bar(),new Bar()}; 
  private List<Bar> listBar = new ArrayList<Bar>(); 

  { 
    listString.add("listString1"); 
    listString.add("listString2"); 
    listString.add("listString3"); 

    @H_683_23@map.put("x",68)">"s11111x"); 
    @H_683_23@map.put("y",68)">"s22222y"); 
    @H_683_23@map.put("z",68)">"s33333z"); 

    listBar.add(new Bar()); 
    listBar.add(new Bar()); 
    listBar.add(new Bar()); 
  } 



  public String getvString() { 
    return vString; 
  } 

  public void setvString(String vString) { 
    this.vString = vString; 
  } 

  public char getVchar() { 
    return vchar; 
  } 

  public void setVchar(char vchar) { 
    this.vchar = vchar; 
  } 

  public byte getVbyte() { 
    return vbyte; 
  } 

  public void setVbyte(byte vbytE) { 
    this.vbyte = vbyte; 
  } 

  public short getVshort() { 
    return vshort; 
  } 

  public void setVshort(short vshort) { 
    this.vshort = vshort; 
  } 

  public int getVint() { 
    return vint; 
  } 

  public void setVint(int vint) { 
    this.vint = vint; 
  } 

  public long getVlong() { 
    return vlong; 
  } 

  public void setVlong(long vlong) { 
    this.vlong = vlong; 
  } 

  public float getVfloat() { 
    return vfloat; 
  } 

  public void setVfloat(float vfloat) { 
    this.vfloat = vfloat; 
  } 

  public double getVdouble() { 
    return vdouble; 
  } 

  public void setVdouble(double vdoublE) { 
    this.vdouble = vdouble; 
  } 

  public Boolean isVBoolean() { 
    return vBoolean; 
  } 

  public void setVBoolean(Boolean vBoolean) { 
    this.vBoolean = vBoolean; 
  } 

  public Date getDddd() { 
    return dddd; 
  } 

  public void setDddd(Date dddd) { 
    this.dddd = dddd; 
  } 

  public Date getV_Date() { 
    return v_Date; 
  } 

  public void setV_Date(Date v_DatE) { 
    this.v_Date = v_Date; 
  } 

  public Date getvDate() { 
    return vDate; 
  } 

  public void setvDate(Date vDatE) { 
    this.vDate = vDate; 
  } 

  public Object getVnull() { 
    return vnull; 
  } 

  public void setVnull(Object vnull) { 
    this.vnull = vnull; 
  } 

  public String[] getAvString() { 
    return avString; 
  } 

  public void setAvString(String[] avString) { 
    this.avString = avString; 
  } 

  public int[] getAvint() { 
    return avint; 
  } 

  public void setAvint(int[] avint) { 
    this.avint = avint; 
  } 

  public Boolean[] getAvBoolean() { 
    return avBoolean; 
  } 

  public void setAvBoolean(Boolean[] avBoolean) { 
    this.avBoolean = avBoolean; 
  } 

  public List<String> getListString() { 
    return listString; 
  } 

  public void setListString(List<String> listString) { 
    this.listString = listString; 
  } 

  public Map<String,String> getMap() { 
    return map; 
  } 

  public void setMap(Map<String,String> map) { 
    this.map = map; 
  } 

  public Bar getBar() { 
    return bar; 
  } 

  public void setBar(Bar bar) { 
    this.bar = bar; 
  } 

  public Bar[] getAvBar() { 
    return avBar; 
  } 

  public void setAvBar(Bar[] avBar) { 
    this.avBar = avBar; 
  } 

  public List<Bar> getListBar() { 
    return listBar; 
  } 

  public void setListBar(List<Bar> listBar) { 
    this.listBar = listBar; 
  } 
}

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.serializer.serializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatserializer; 

import java.util.Date; 
import java.util.Random; 

class Bar { 
  public static serializeConfig mapping = new serializeConfig(); 
  private String barName; 
  private int barAge; 
  private Date barDate = new Date(); 
  static { 
    @H_683_23@mapping.put(Date.class,new SimpleDateFormatserializer("yyyy-MM-dd")); 
  } 
  { 
    Random r = new Random(); 
    barName = "sss_"+String.valueOf(r.nextFloat()); 
    barAge = r.nexTint(); 
  } 

  public static void main(String[] args) { 
    Object obj = JSON.toJSON(new Bar()); 
    String x1 = JSON.toJSONString(new Bar(),true); 
    System.out.println(x1); 
    String x2 = JSON.toJSONString(new Bar(),mapping); 
    System.out.println(x2); 
  } 

  public String getBarName() { 
    return barName; 
  } 

  public void setBarName(String barName) { 
    this.barName = barName; 
  } 

  public int getBarAge() { 
    return barAge; 
  } 

  public void setBarAge(int barAgE) { 
    this.barAge = barAge; 
  } 

  public Date getBarDate() { 
    return barDate; 
  } 

  public void setBarDate(Date barDatE) { 
    this.barDate = barDate; 
  } 

  @Override 
  public String toString() { 
    return "Bar{" + 
        "barName='" + barName + '\'' + 
        ",barAge=" + barAge + 
         + barDate + 
        '}'; 
  } 
}

package lavasoft.stu.json; 

import com.alibaba.fastjson.JSON; 
import com.alibaba.fastjson.JSONArray; 
import com.alibaba.fastjson.serializer.serializeConfig; 
import com.alibaba.fastjson.serializer.SimpleDateFormatserializer; 

import java.util.*; 

/** 
* Created by 2IntelliJ IDEA. 
* 
* @author leizhimin 11-11-22 上午9:45 
*/ 
public class Test { 
  private static serializeConfig mapping = new serializeConfig(); static { 
    @H_683_23@mapping.put(Date.class,68)">"yyyy-MM-dd HH:mm:ss")); 
  } 

  public static void main(String[] args) { 
    Foo f1 = new Foo(); 
    Date date = new Date(); 
    String text = JSON.toJSONString(date,mapping); 
    System.out.println(text); 
    System.out.println(JSON.toJSONString(f1,true)); 
    String x2 =JSON.toJSONString(f1,mapping); 
    System.out.println(x2); 
  } 

  public static void json2List(){ 
    //List -> JSON array 
    List<Bar> barList = new ArrayList<Bar>(); 
    barList.add(new Bar()); 
    barList.add(new Bar()); 
    barList.add(new Bar()); 
    String json= JSON.toJSONString(barList,true); 
    System.out.println(json); 
    //JSON array -> List 
    List<Bar> barList1 = JSON.parseArray(json,Bar.class); 
    for (Bar bar : barList1) { 
      System.out.println(bar.toString()); 
    } 
  } 

  public static void json2Map(){ 
    //Map -> JSON 
    @H_683_23@map<String,Bar> map = new HashMap<String,Bar>(); 
    @H_683_23@map.put("a",new Bar()); 
    @H_683_23@map.put("b",68)">"c",new Bar()); 
    String json = JSON.toJSONString(map,136); font-style:italic">//JSON -> Map 
    @H_683_23@map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json); 
    for (String key : map1.keySet()) { 
      System.out.println(key+":"+map1.get(key)); 
    } 
  } 

  public static void array2JSON(){ 
    String[] arr_String    = {"c"}; 
    String json_arr_String = JSON.toJSONString(arr_String,true); 
    System.out.println(json_arr_String); 
    JSONArray jsonArray = JSON.parseArray(json_arr_String); 
    for (Object o : jsonArray) { 
      System.out.println(o); 
    } 
    System.out.println(jsonArray); 
  } 
  public static void array2JSON2(){ 
    Bar[] arr_Bar    = {new Bar(),new Bar(),new Bar()}; 
    String json_arr_Bar = JSON.toJSONString(arr_Bar,true); 
    System.out.println(json_arr_Bar); 
    JSONArray jsonArray = JSON.parseArray(json_arr_Bar); 
    for (Object o : jsonArray) { 
      System.out.println(o); 
    } 
    System.out.println(jsonArray); 
  } 

  public static void map2JSON(){ 
    @H_683_23@map map = new HashMap(); 
    @H_683_23@map.put("aaa"); 
    @H_683_23@map.put("bbb"); 
    @H_683_23@map.put("ccc"); 
    String json=JSON.toJSONString(map); 
    System.out.println(json); 
    @H_683_23@map map1 = JSON.parSEObject(json); 
    for (Object o : map.entrySet()) { 
      @H_683_23@map.Entry<String,String> entry = (Map.Entry<String,String>)o; 
      System.out.println(entry.getKey()+"--->"+entry.getValue()); 
    } 
  } 
}

@H_568_1607@ 说明:

serializeConfig:是对序列化过程中一些序列化过程的特殊配置,这里用作日期格式的定义。

有关需要带类型的全类型序列化过程,需要调用JSON.toJSONStringZ()方法

需要美化输出时候,需要打开序列化美化开关,在方法中true那个参数。

@H_568_1607@ 输出结果:
"2011-11-23 23:30:33" 
{ 
  "avBar"@H_696_1622@:[{ 
    "barAge"@H_696_1622@:174398800,68)">"barDate"1322062233062,68)">"barName"@H_696_1622@:"sss_0.62378174" 
  },{ 
    38938962,68)">"sss_0.36014742" 
  }],68)">"avString"@H_696_1622@:["ccc"],68)">"avBoolean"@H_696_1622@:[true,true],68)">"avint"@H_696_1622@:[4],68)">"bar"@H_696_1622@:{ 
    1601495948,68)">"sss_0.46644872" 
  },68)">"dddd"1322062233046,68)">"listBar"@H_696_1622@:[ 
    { 
      :-1090113522,68)">"sss_0.83562374" 
    },{ 
      478603194,68)">"sss_0.59483266" 
    },153)">1118357669,68)">"sss_0.9961642" 
    } 
  ],68)">"listString"@H_696_1622@:[ 
    "listString1",68)">"listString2",68)">"listString3" 
  ],68)">"map"@H_696_1622@:{"x"@H_916_1674@"s11111x",68)">"y"@H_916_1674@"s22222y",68)">"z"@H_916_1674@"s33333z"},68)">"v_Date"@H_916_1674@"vBoolean"@H_696_1622@:false,68)">"vbyte"64,68)">"vchar"@H_916_1674@"x",68)">"vdouble"22.203,68)">"vfloat"12.1,68)">"vint"65535,68)">"vlong"9999999,68)">"vshort"128 
} 
{:[{"2011-11-23 23:30:33",68)">"sss_0.62378174"},{"sss_0.36014742"}],68)">"sss_0.46644872"},68)">"sss_0.83562374"},68)">"sss_0.59483266"},68)">"sss_0.9961642"}],68)">"listString3"],153)">128} 

Process finished with exit code 0

测试小例子:

JSONObject json = new JSONObject();
json.put("aa",68)">"11");
json.put("bb",68)">"22");
json.put("cc",68)">"33");
String jsonStr = json.toString();
System.out.println(jsonStr);
// {"aa":"11","bb":"22","cc":"33"}	
  
System.out.println(JSONObject.parSEObject(jsonStr).get("aa"));
// 11

String o = "{'area':{'area':'1','pagetype':'home'},'pagetype':'home'}";
System.out.println(((Map) JSONObject.parSEObject(o).get("area")).get("area"));
// 1
String text = JSON.toJSONString(o);
Map<String,Object> userMap = 
    JSON.parSEObject(o,new TypeReference<Map<String,Object>>() {});
System.out.println(((Map) userMap.get("NotExsit"));
// null

System.out.println(JSON.toJSONString((Map) userMap.get("area")));
// {"area":"1","pagetype":"home"}

fastjson通过各方面测试都很好,功能性能都是No.1,喜欢,它的源代码质量很高,作者也煞费苦心,将性能做到了最好,全免超越其他的json类库。

从其中的源代码中,可以学到很多东西,在阅读源码后,不得不佩服作者高超的程序设计水平,和高质量的编码。

大佬总结

以上是大佬教程为你收集整理的FastJSON 简介及其Map/JSON/String 互转全部内容,希望文章能够帮你解决FastJSON 简介及其Map/JSON/String 互转所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
猜你在找的Json相关文章