import{_ as n}from"./plugin-vue_export-helper.21dcd24c.js";import{o as s,c as a,e}from"./app.85cbe1c4.js";const t={},p=e(`

01\u3001\u524D\u4E16\u4ECA\u751F

\u6211\u662F fastjson\uFF0C\u662F\u4E2A\u5730\u5730\u9053\u9053\u7684\u676D\u5DDE\u571F\u8457\uFF0C\u4F46\u6211\u59CB\u7EC8\u6000\u63E3\u7740\u4E00\u9897\u8D70\u5411\u5168\u4E16\u754C\u7684\u96C4\u5FC3\u3002\u8FD9\u4E0D\uFF0C\u6211\u5728 GitHub \u4E0A\u7684\u7B80\u4ECB\u90FD\u6362\u6210\u4E86\u82F1\u6587\uFF0C\u56FD\u9645\u8303\u5341\u8DB3\u5427\uFF1F

\u5982\u679C\u4F60\u7684\u82F1\u8BED\u529F\u5E95\u6CA1\u6709\u6211\u5BB6\u8001\u677F 666 \u7684\u8BDD\uFF0C\u6211\u53EF\u4EE5\u7B80\u5355\u5730\u7FFB\u8BD1\u4E0B\uFF08\u8BF4\u4EBA\u8BDD\uFF0C\u4E0D\u88C5\u903C\uFF09\u3002

\u6211\u662F\u963F\u91CC\u5DF4\u5DF4\u5F00\u6E90\u7684\u4E00\u6B3E JSON \u89E3\u6790\u5E93\uFF0C\u53EF\u4EE5\u5C06 Java \u5BF9\u8C61\u5E8F\u5217\u5316\u6210 JSON \u5B57\u7B26\u4E32\uFF0C\u540C\u65F6\u4E5F\u53EF\u4EE5\u5C06 JSON \u5B57\u7B26\u4E32\u53CD\u5E8F\u5217\u5316\u4E3A Java \u5BF9\u8C61\u3002

2012 \u5E74\u7684\u65F6\u5019\uFF0C\u6211\u5C31\u88AB\u5F00\u6E90\u4E2D\u56FD\u8BC4\u9009\u4E3A\u6700\u53D7\u6B22\u8FCE\u7684\u56FD\u4EA7\u5F00\u6E90\u8F6F\u4EF6\u4E4B\u4E00\u3002\u65F6\u9694\u591A\u5E74\uFF0C\u6211\u7684\u6D41\u884C\u8D8B\u52BF\u6CA1\u6709\u4E1D\u6BEB\u51CF\u9000\uFF0C\u5728 JSON \u9886\u57DF\uFF0C\u6211\u6562\u8BF4\u6211\u662F NO 1\uFF0C\u56E0\u4E3A\u6211\u5728 GitHub \u4E0A\u7684\u7C89\u4E1D\u6570\u5DF2\u7ECF\u8D85\u8FC7\u4E86 22k\uFF0C\u6CA1\u6709\u4EFB\u4F55\u4EBA\u6562\u5FFD\u89C6\u6211\u8FD9\u6837\u7684\u6210\u5C31\u3002

02\u3001\u4F7F\u7528\u6307\u5357

\u5728\u4F7F\u7528\u6211\u7684 API \u4E4B\u524D\uFF0C\u9700\u8981\u5148\u5728 pom.xml \u6587\u4EF6\u4E2D\u5F15\u5165\u6211\u7684\u4F9D\u8D56\u3002

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

\u6211\u6765\u5199\u4E00\u4E2A\u7B80\u5355\u7684\u6D4B\u8BD5\u7528\u4F8B\uFF0C\u4F60\u770B\u4E00\u4E0B\u3002

public class Test {
    public static void main(String[] args) {
        Writer writer = new Writer();
        writer.setAge(18);
        writer.setName("\u6C89\u9ED8\u738B\u4E8C");

        String json = JSON.toJSONString(writer);
        System.out.println(json);
    }
}
class Writer {
    private int age;
    private String name;

    // getter/setter
}

Writer \u662F\u4E00\u4E2A\u666E\u901A\u7684 Java \u7C7B\uFF0C\u6709\u4E24\u4E2A\u5B57\u6BB5\uFF0C\u5206\u522B\u662F age \u548C name\uFF0C\u8FD8\u6709\u5B83\u4EEC\u4FE9\u5BF9\u5E94\u7684 getter \u548C setter \u65B9\u6CD5\u3002

main() \u65B9\u6CD5\u4E2D\u521B\u5EFA\u4E86\u4E00\u4E2A Writer \u5BF9\u8C61\uFF0C\u7136\u540E\u8C03\u7528\u6211\u63D0\u4F9B\u7684\u4E00\u4E2A\u9759\u6001\u65B9\u6CD5 JSON.toJSONString() \u6765\u5F97\u5230 JSON \u5B57\u7B26\u4E32\u3002

\u6765\u770B\u4E00\u4E0B\u6253\u5370\u540E\u7684\u7ED3\u679C\u3002

{"age":18,"name":"\u6C89\u9ED8\u738B\u4E8C"}

\u5982\u679C\u60F3\u53CD\u5E8F\u5217\u5316\u7684\u8BDD\uFF0C\u6267\u884C\u4EE5\u4E0B\u7684\u4EE3\u7801\u5373\u53EF\u3002

Writer writer1 = JSON.parseObject(json, Writer.class);

\u8C03\u7528\u9759\u6001\u65B9\u6CD5 JSON.parseObject()\uFF0C\u4F20\u9012\u4E24\u4E2A\u53C2\u6570\uFF0C\u4E00\u4E2A\u662F JSON \u5B57\u7B26\u4E32\uFF0C\u4E00\u4E2A\u662F\u5BF9\u8C61\u7684\u7C7B\u578B\u3002

\u5982\u679C\u60F3\u628A JSON \u5B57\u7B26\u4E32\u8F6C\u6210\u96C6\u5408\u7684\u8BDD\uFF0C\u9700\u8981\u8C03\u7528\u53E6\u5916\u4E00\u4E2A\u9759\u6001\u65B9\u6CD5 JSON.parseArray()\u3002

List<Writer> list = JSON.parseArray("[{\\"age\\":18,\\"name\\":\\"\u6C89\u9ED8\u738B\u4E8C\\"},{\\"age\\":19,\\"name\\":\\"\u6C89\u9ED8\u738B\u4E00\\"}]", Writer.class);

\u5982\u679C\u6CA1\u6709\u7279\u6B8A\u8981\u6C42\u7684\u8BDD\uFF0C\u6211\u6562\u8FD9\u4E48\u8BF4\uFF0C\u4EE5\u4E0A 3 \u4E2A\u65B9\u6CD5\u5C31\u53EF\u4EE5\u8986\u76D6\u5230\u4F60\u7EDD\u5927\u591A\u6570\u7684\u4E1A\u52A1\u573A\u666F\u4E86\u3002

03\u3001\u4F7F\u7528\u6CE8\u89E3

\u6709\u65F6\u5019\uFF0C\u4F60\u7684 JSON \u5B57\u7B26\u4E32\u4E2D\u7684 key \u53EF\u80FD\u4E0E Java \u5BF9\u8C61\u4E2D\u7684\u5B57\u6BB5\u4E0D\u5339\u914D\uFF0C\u6BD4\u5982\u5927\u5C0F\u5199\uFF1B\u6709\u65F6\u5019\uFF0C\u4F60\u9700\u8981\u6307\u5B9A\u4E00\u4E9B\u5B57\u6BB5\u5E8F\u5217\u5316\u4F46\u4E0D\u53CD\u5E8F\u5217\u5316\uFF1B\u6709\u65F6\u5019\uFF0C\u4F60\u9700\u8981\u65E5\u671F\u5B57\u6BB5\u663E\u793A\u6210\u6307\u5B9A\u7684\u683C\u5F0F\u3002

\u8FD9\u4E9B\u7279\u6B8A\u573A\u666F\uFF0C\u6211\u7EDF\u7EDF\u4E3A\u4F60\u8003\u8651\u5230\u4E86\uFF0C\u53EA\u9700\u8981\u5728\u5BF9\u5E94\u7684\u5B57\u6BB5\u4E0A\u52A0\u4E0A @JSONField \u6CE8\u89E3\u5C31\u53EF\u4EE5\u4E86\u3002

\u5148\u6765\u770B\u4E00\u4E0B @JSONField \u6CE8\u89E3\u7684\u5B9A\u4E49\u5427\u3002

public @interface JSONField {
    String name() default "";
    String format() default "";
    boolean serialize() default true;
    boolean deserialize() default true;
}

name \u7528\u6765\u6307\u5B9A\u5B57\u6BB5\u7684\u540D\u79F0\uFF0Cformat \u7528\u6765\u6307\u5B9A\u65E5\u671F\u683C\u5F0F\uFF0Cserialize \u548C deserialize \u7528\u6765\u6307\u5B9A\u662F\u5426\u5E8F\u5217\u5316\u548C\u53CD\u5E8F\u5217\u5316\u3002

class Writer {
    private int age;
    private String name;
    private Date birthday;

    @JSONField(format = "yyyy\u5E74MM\u6708dd\u65E5")
    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @JSONField(name = "Age")
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @JSONField(serialize = false,deserialize = true)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

\u6211\u5EFA\u8BAE\u5728 getter \u5B57\u6BB5\u4E0A\u4F7F\u7528 @JSONField \u6CE8\u89E3\u3002\u6765\u770B\u4E00\u4E0B\u6D4B\u8BD5\u4EE3\u7801\u3002

Writer writer = new Writer();
writer.setAge(18);
writer.setName("\u6C89\u9ED8\u738B\u4E8C");
writer.setBirthday(new Date());

String json = JSON.toJSONString(writer);
System.out.println(json);

\u6B64\u65F6\u7684\u8F93\u51FA\u7ED3\u679C\u5982\u4E0B\u6240\u793A\u3002

{"Age":18,"birthday":"2020\u5E7412\u670817\u65E5"}

JSON \u5B57\u7B26\u4E32\u4E2D\u7684 Age \u9996\u5B57\u6BCD\u4E3A\u5927\u5199\uFF0Cbirthday \u7684\u683C\u5F0F\u7B26\u5408\u201C\u5E74\u6708\u65E5\u201D\u7684\u9884\u671F\uFF0Cname \u5B57\u6BB5\u6CA1\u6709\u51FA\u73B0\u5728\u7ED3\u679C\u4E2D\uFF0C\u8BF4\u660E\u6CA1\u6709\u88AB\u5E8F\u5217\u5316\u3002

04\u3001\u5E8F\u5217\u5316\u7279\u6027

\u4E3A\u4E86\u6EE1\u8DB3\u66F4\u591A\u4E2A\u6027\u5316\u7684\u9700\u6C42\uFF0C\u6211\u5728 SerializerFeature \u7C7B\u4E2D\u5B9A\u4E49\u4E86\u5F88\u591A\u7279\u6027\uFF0C\u4F60\u53EF\u4EE5\u5728\u8C03\u7528 toJSONString() \u65B9\u6CD5\u7684\u65F6\u5019\u8FDB\u884C\u6307\u5B9A\u3002

\u7B49\u7B49\u7B49\u7B49\uFF0C\u66F4\u591A\u65B0\u6280\u80FD\uFF0C\u7B49\u5F85\u4F60\u53BB\u5F00\u9501\u3002\u6211\u8FD9\u91CC\u5199\u4E2A\u7B80\u5355\u7684 demo \u4F9B\u4F60\u53C2\u8003\u3002

System.out.println(JSON.toJSONString(writer, 
SerializerFeature.PrettyFormat, 
SerializerFeature.UseSingleQuotes));

\u5BF9\u6BD4\u4E00\u4E0B\u914D\u7F6E\u524D\u548C\u914D\u7F6E\u540E\u7684\u7ED3\u679C\u3002

{"Age":18,"birthday":"2020\u5E7412\u670817\u65E5"}
{
	'Age':18,
	'birthday':'2020\u5E7412\u670817\u65E5'
}

05\u3001\u6211\u4E3A\u4EC0\u4E48\u5FEB

\u4F17\u6240\u5468\u77E5\uFF0C\u628A Java \u5BF9\u8C61\u5E8F\u5217\u5316\u6210 JSON \u5B57\u7B26\u4E32\uFF0C\u662F\u4E0D\u53EF\u80FD\u4F7F\u7528\u5B57\u7B26\u4E32\u76F4\u63A5\u62FC\u63A5\u7684\uFF0C\u56E0\u4E3A\u8FD9\u6837\u6027\u80FD\u5F88\u5DEE\u3002\u6BD4\u5B57\u7B26\u4E32\u62FC\u63A5\u66F4\u597D\u7684\u529E\u6CD5\u5C31\u662F\u4F7F\u7528 StringBuilder\u3002

StringBuilder \u5C3D\u7BA1\u5DF2\u7ECF\u5F88\u597D\u4E86\uFF0C\u4F46\u5728\u6027\u80FD\u4E0A\u8FD8\u6709\u4E0A\u5347\u7684\u7A7A\u95F4\u3002\u201C\u81EA\u5DF1\u52A8\u624B\uFF0C\u4E30\u8863\u8DB3\u98DF\u201D\uFF0C\u4E8E\u662F\u6211\u5C31\u521B\u9020\u4E86\u4E00\u4E2A SerializeWriter \u7C7B\uFF0C\u4E13\u95E8\u7528\u6765\u5E8F\u5217\u5316\u3002

SerializeWriter \u7C7B\u4E2D\u5305\u542B\u4E86\u4E00\u4E2A char[] buf\uFF0C\u6BCF\u5E8F\u5217\u5316\u4E00\u6B21\uFF0C\u90FD\u8981\u505A\u4E00\u6B21\u5206\u914D\uFF0C\u4F46\u6211\u4F7F\u7528\u4E86 ThreadLocal \u6765\u8FDB\u884C\u4F18\u5316\uFF0C\u8FD9\u6837\u5C31\u80FD\u591F\u6709\u6548\u5730\u51CF\u5C11\u5BF9\u8C61\u7684\u5206\u914D\u548C\u5783\u573E\u56DE\u6536\uFF0C\u4ECE\u800C\u63D0\u5347\u6027\u80FD\u3002

private final static ThreadLocal<char[]> bufLocal         = new ThreadLocal<char[]>();

public SerializeWriter(java.io.Writer writer, int defaultFeatures, SerializerFeature... features){
    this.writer = writer;

    buf = bufLocal.get();

    if (buf != null) {
        bufLocal.set(null);
    } else {
        buf = new char[2048];
    }
}

\u9664\u6B64\u4E4B\u5916\uFF0C\u8FD8\u6709\u5F88\u591A\u5176\u4ED6\u7684\u7EC6\u8282\uFF0C\u6BD4\u5982\u8BF4\u4F7F\u7528 IdentityHashMap \u800C\u4E0D\u662F HashMap\uFF0C\u65E2\u53EF\u4EE5\u907F\u514D\u591A\u4F59\u7684 equals \u64CD\u4F5C\uFF0C\u53C8\u53EF\u4EE5\u907F\u514D\u591A\u7EBF\u7A0B\u5E76\u53D1\u60C5\u51B5\u4E0B\u7684\u6B7B\u5FAA\u73AF\u3002

/**
 * for concurrent IdentityHashMap
 * 
 * @author wenshao[szujobs@hotmail.com]
 */
@SuppressWarnings("unchecked")
public class IdentityHashMap<K, V> {
    private final Entry<K, V>[] buckets;
    private final int           indexMask;
    public final static int DEFAULT_SIZE = 8192;
}

\u518D\u6BD4\u5982\u8BF4\uFF0C\u4F7F\u7528 asm \u6280\u672F\u6765\u907F\u514D\u53CD\u5C04\u5BFC\u81F4\u7684\u5F00\u9500\u3002

\u6211\u627F\u8BA4\uFF0C\u5FEB\u7684\u540C\u65F6\uFF0C\u4E5F\u5E26\u6765\u4E86\u4E00\u4E9B\u5B89\u5168\u6027\u7684\u95EE\u9898\u3002\u5C24\u5176\u662F AutoType \u7684\u5F15\u5165\uFF0C\u8BA9\u9ED1\u5BA2\u6709\u4E86\u53EF\u4E58\u4E4B\u673A\u3002

1.2.59 \u53D1\u5E03\uFF0C\u589E\u5F3A AutoType \u6253\u5F00\u65F6\u7684\u5B89\u5168\u6027

1.2.60 \u53D1\u5E03\uFF0C\u589E\u52A0\u4E86 AutoType \u9ED1\u540D\u5355\uFF0C\u4FEE\u590D\u62D2\u7EDD\u670D\u52A1\u5B89\u5168\u95EE\u9898

1.2.61 \u53D1\u5E03\uFF0C\u589E\u52A0 AutoType \u5B89\u5168\u9ED1\u540D\u5355

1.2.62 \u53D1\u5E03\uFF0C\u589E\u52A0 AutoType \u9ED1\u540D\u5355\u3001\u589E\u5F3A\u65E5\u671F\u53CD\u5E8F\u5217\u5316\u548C JSONPath

1.2.66 \u53D1\u5E03\uFF0CBug \u4FEE\u590D\u5B89\u5168\u52A0\u56FA\uFF0C\u5E76\u4E14\u505A\u5B89\u5168\u52A0\u56FA\uFF0C\u8865\u5145\u4E86 AutoType \u9ED1\u540D\u5355

1.2.67 \u53D1\u5E03\uFF0CBug \u4FEE\u590D\u5B89\u5168\u52A0\u56FA\uFF0C\u8865\u5145\u4E86 AutoType \u9ED1\u540D\u5355

1.2.68 \u53D1\u5E03\uFF0C\u652F\u6301 GEOJSON\uFF0C\u8865\u5145\u4E86 AutoType \u9ED1\u540D\u5355\u3002\uFF08\u5F15\u5165\u4E00\u4E2A safeMode \u7684\u914D\u7F6E\uFF0C\u914D\u7F6E safeMode \u540E\uFF0C\u65E0\u8BBA\u767D\u540D\u5355\u548C\u9ED1\u540D\u5355\uFF0C\u90FD\u4E0D\u652F\u6301 autoType\u3002\uFF09

1.2.69 \u53D1\u5E03\uFF0C\u4FEE\u590D\u65B0\u53D1\u73B0\u9AD8\u5371 AutoType \u5F00\u5173\u7ED5\u8FC7\u5B89\u5168\u6F0F\u6D1E\uFF0C\u8865\u5145\u4E86 AutoType \u9ED1\u540D\u5355

1.2.70 \u53D1\u5E03\uFF0C\u63D0\u5347\u517C\u5BB9\u6027\uFF0C\u8865\u5145\u4E86 AutoType \u9ED1\u540D\u5355

\u5728\u4E8E\u9ED1\u5BA2\u7684\u53CD\u590D\u8F83\u91CF\u4E2D\uFF0C\u6211\u867D\u7136\u53D8\u5F97\u8D8A\u6765\u8D8A\u7A33\u91CD\u6210\u719F\u4E86\uFF0C\u4F46\u4E0E\u6B64\u540C\u65F6\uFF0C\u8BA9\u6211\u7684\u7528\u6237\u4E3A\u6B64\u4E5F\u4ED8\u51FA\u4E86\u6C89\u91CD\u7684\u4EE3\u4EF7\u3002

\u7F51\u7EDC\u4E0A\u4E5F\u51FA\u73B0\u4E86\u5F88\u591A\u4E0D\u548C\u8C10\u7684\u58F0\u97F3\uFF0C\u4ED6\u4EEC\u58F0\u79F0\u6211\u662F\u6700\u5783\u573E\u7684\u56FD\u4EA7\u5F00\u6E90\u8F6F\u4EF6\u4E4B\u4E00\uFF0C\u53EA\u4E0D\u8FC7\u51ED\u501F\u7740\u4E00\u4E9B\u6295\u673A\u53D6\u5DE7\u8D62\u5F97\u4E86\u56FD\u5185\u5F00\u53D1\u8005\u7684\u4FE1\u8D56\u3002

\u4F46\u66F4\u591A\u7684\u662F\uFF0C\u5BF9\u6211\u7684\u4E0D\u79BB\u4E0D\u5F03\u3002

\u6700\u4EE4\u6211\u611F\u5230\u4E3A\u4E4B\u52A8\u5BB9\u7684\u4E00\u53E5\u8BDD\u662F\uFF1A

\u6E29\u5C11\u51E0\u4E4E\u51ED\u4E00\u5DF1\u4E4B\u529B\u6491\u8D77\u4E86\u4E00\u4E2A\u88AB\u5E7F\u6CDB\u4F7F\u7528 JSON \u5E93\uFF0C\u800C\u5176\u4ED6\u5E93\u51E0\u4E4E\u90FD\u662F\u9760\u4E00\u6574\u4E2A\u56E2\u961F\uFF0C\u5C31\u51ED\u8FD9\u4E00\u70B9\uFF0C\u6E29\u5C11\u4F5C\u4E3A\u201C\u521D\u5FC3\u4E0D\u6539\u7684\u963F\u91CC\u521D\u4EE3\u5F00\u6E90\u4EBA\u201D\uFF0C\u5F53\u4E4B\u65E0\u6127\u3002

\u51FA\u73B0\u6F0F\u6D1E\u5E76\u4E0D\u53EF\u6015\uFF0C\u53EF\u6015\u7684\u662F\u53D1\u73B0\u4E0D\u4E86\u6F0F\u6D1E\uFF0C\u6216\u8005\u8BF4\u65E0\u6CD5\u89E3\u51B3\u6389\u6F0F\u6D1E\u3002

\u4E3A\u4E86\u5F7B\u5E95\u89E3\u51B3 AutoType \u5E26\u6765\u7684\u95EE\u9898\uFF0C\u5728 1.2.68 \u7248\u672C\u4E2D\uFF0C\u6211\u5F15\u5165\u4E86 safeMode \u7684\u5B89\u5168\u6A21\u5F0F\uFF0C\u65E0\u8BBA\u767D\u540D\u5355\u548C\u9ED1\u540D\u5355\uFF0C\u90FD\u4E0D\u652F\u6301 AutoType\uFF0C\u8FD9\u6837\u5C31\u53EF\u4EE5\u5F7B\u5E95\u5730\u675C\u7EDD\u653B\u51FB\u3002

\u5B89\u5168\u6A21\u5F0F\u4E0B\uFF0CcheckAutoType() \u65B9\u6CD5\u4F1A\u76F4\u63A5\u629B\u51FA\u5F02\u5E38\u3002

06\u3001\u5C3E\u58F0

\u4E0D\u7BA1\u524D\u9762\u7684\u8DEF\u8FD8\u6709\u591A\u5C11\u8270\u96BE\u56F0\u82E6\uFF0C\u4E5F\u4E0D\u7BA1\u8FD8\u8981\u9762\u5BF9\u591A\u5C11\u98CE\u8A00\u98CE\u8BED\uFF0C\u6211\u90FD\u4F1A\u7825\u783A\u524D\u884C\uFF0C\u4E3A\u4E86\u56FD\u4EA7\u5F00\u6E90\u8F6F\u4EF6\u7684\u84EC\u52C3\u53D1\u5C55\uFF0C\u6211\u613F\u610F\u505A\u4E00\u4E2A\u5148\u9A71\u8005\uFF0C\u4E5F\u613F\u610F\u505A\u4E00\u4E2A\u6301\u4E45\u6218\u8005\u3002

2020 \u5E74\u7684\u6700\u540E\u4E00\u7BC7\u6587\u7AE0\uFF01\u770B\u5230\u7684\u5C31\u70B9\u4E2A\u8D5E\u5427\uFF0C2021 \u5E74\u987A\u987A\u5229\u5229\u3002

`,67),o=[p];function c(i,l){return s(),a("div",null,o)}var d=n(t,[["render",c],["__file","fastjson.html.vue"]]);export{d as default};