java 字符串转json的json问题遇到以下问题怎么解决

java的json问题遇到以下问题怎么解决_百度知道
java的json问题遇到以下问题怎么解决
我有更好的答案
大兄弟!问题了?
可以使用jackson、json-lib、fastjson这些第三方工具进行操作。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。使用Json出现java.lang.NoClassDefFoundError解决方法
前几天在项目使用到Json格式数据,于是把使用Json需要用到的包都引到了工程里面,程序写好后运行时,发现后台报
java.lang.NoClassDefFoundError: net/sf/json/JSONArray
的错误,开始以为相应的jar包引入有问题,检查后发现所有的包都已经引入了,怎么还会出现这个问题呢?
&& 原来我使用的是myeclipse+tomcat
环境,因该项目已经部署过,使用jason所用的包是后面加的,我在myeclipse里面配置了,但是myeclipse不会自动把这些包重新部署到tomcat中去,所以,当网站运行起来后,就报找不到类的错了。
既然是这样,把对应的jar包部署到tomcat中去,问题解决。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。让天下没有难学的技术
JSON数据乱码问题
JSON数据乱码问题
程序员一提到编码应该都不陌生,像gbk、utf-8、ascii等这些编码更是经常在用,但时不时也会出个乱码问题,解决这个问题的方法大部分都是先google和baidu一下,最后可能在某个犄角旮旯里找到一点信息,然后就机械的按部就班的模仿下来,结果问题可能真就迎刃而解了,然后就草草了事,下回遇到相似的问题,可能又是重复上面的过程。很少有人有耐心去花精力弄明白这写问题的根本原因,以及解决这些问题的原理是什么。这篇文章就是通过一个实际案例,试着去讲清楚什么是编码,乱码又是怎么产生的,以及如何解决。该案例是从lua_cjson.c这个库开始的,对这个库不熟悉也没关系,也不需要熟悉它,我们只是借用它来说明乱码问题,只需要跟着文章的思路走就可以。
前段时间同事在作一个新项目的时候用到了lua_cjson.c这个库(以下简称cjson),将json串转换成LUA本地的数据结构,但是在使用的过程中出现了中文乱码问题,奇怪的是只有那么几个字是乱码,这其中就包括”朶”字,其他字一切正常。经了解json串用的是GBK编码,那问题就来了,为什么用gbk编码会出现这个问题,原因是什么?又应该怎么解决这个问题?
要解释清楚这个问题,首先我们来看看json串都有哪些要求。
json全称JavaScript Object Notion是结构化数据序列化的一个文本,可以描述四种基本类型(strings,numbers,booleans and null)和两种结构类型(objects and arrays)。
RFC4627中有这样一段话
A string is a sequence of zero or more Unicode characters.
字符串有零个或多个unicode字符序列组成.
在这里稍微解释下什么是unicode字符。我们都知道ascii字符有字母、数字等,但是他收录的字只有一百多个。比如汉字就不是ascii字符,但是unicode收录了汉字,所以汉字可以是unicode字符。这里要说明的是unicode字符其实就是一些符号。
现在另一个问题出来了,在json文本中应该怎么表示这些字符。
在规范的Encoding片段是这样说的
JSON text SHALL be encoded in Unicode. The default encoding is UTF-8。
JSON文本SHALL把unicode字符编码。默认使用utf-8编码。
我们看到在这里用到了SHALL[RFC2119]这个关键字,也就是说字符必须被编码后才能作为JSON串使用。而且默认使用utf-8编码。
如何判断使用的是那种unicode编码呢?
Since the first two characters of a JSON text will always be ASCII characters[RFC0020],
it is possible to determine whether an octet stream is UTF-8、UTF-16(BE or LE), or
UTF-32(BE or LE)by looking at the pattern of nulls in the first four octets.
由于json文本的前两个字符(注意这里说的是字符,不是字节)一定是ASCII字符,因此可以从一个字节
流的前四个字节(注意是字节)中判断出该字节流是UTF-8、UTF-16(BE or LE)、or UTF-32(BE or LE)编码。
00 00 00 xx UTF-32BE
(u32编码大端)
xx 00 00 00 UTF-32LE
(u32编码小端)
00 xx 00 xx UTF-16BE
(u16编码大端)
xx 00 xx 00 UTF-16LE
(u16编码小端)
xx xx xx xx UTF-8
(utf-8编码)
u32用32位的4字节整数表示一个字符;
u16用16位的2字节整数表示一个字符,如果2字节表示不了,就用连续两个16位的2字节整
数表示,所以就会出现u16编码中有4个字节表示一个字符的情况,和u32的四字节不一
样的是,该字符在u16中的前两个字节和后两个字节之间不会有字序的问题。
utf-8用多个8位的1字节序列来表示一个字符,所以没有字序的问题.
截止到现在我们没有看到任何关于可以使用GBK编码的信息,难道json文本就不能用gbk编码吗,如果真的不能用的话,那为什么cjson不是把所有的gbk编码解释称乱码,而是只有某几个字是乱码.
在规范中对json解析器有这样一段描述:
A JSON parser transforms a JSON text into another representation.
A JSON parser MUST accept all texts that conform to the JSON grammar.
A JSON parser MAY accept non-JSON forms or extensions.
json解析器可以将一个json文本转换成其他表示方式。
json解析器MUST接受所有符合json语法的文本.
json解析器MAY接受非json形式或扩展的文本.
乱码的原因
从规范对对解析器的描述可以看到,规范并没有要求解析器必须对文本的编码方式做校验,而且解析器也可以有选择的去接受非json形式的文本。
现在我们再来看看cjson解析器是如何做的,在cjson开头的注释中说了这么一句话:
Invalid UTF-8 characters are not detected and will be passed untouched。
If required, UTF-8 error checking should be done outside this library。
发现无效的UTF-8编码会直接放过,如果有必要对UTF-8编码的检查应该在该库的之外。
说的很清楚,对非utf8编码直接放过,不做任何检查,所以用gbk编码不符合规范,但又可以被解析的答案就出来了。那”朶”等这些字的乱码问题又是怎么回事? 我们现在看看cjson对规范中的另外两个编码utf16、utf32是如何做的,然后再说乱码问题.
在cjson解析方法的开始处是这么做的:
/* Detect Unicode other than UTF-8(see RFC 4627, Sec 3)
* CJSON can support any simple data type, hence only the first
* character is guaranteed to be ASCII (at worst:'"'). This is
* still enough to detect whether the wrong encoding is in use.
if (json_len &=2 && (!json.data[0] || !json.data[1]))
luaL_error(1,"JSON parser does not support UTF-16 or UTF-32");
前面我们说过一个json串的前两个字符一定是ascii字符,也就是说一个json串至少也的有两个字节.所以这段代码首先判断json串的长度是不是大于等2,然后根据串的前两个字节的值,是否有零来判断该文本是否是非utf-8编码。结果已经看到了,人家不支持规范上说的u16和u32编码.
现在我们就来看看”朶”这个子是如何变成乱码的,经过对cjson源码的分析得知,cjson在处理字节流的时候当遇见’\’反斜杠时会猜测后一个字节应该是要被转义的字符,比如\b、\r之类的字符,如果是就放行,如果不是,cjson就认为这不是一个正确的json格式,就会把这个字节给干掉,所以本来用两个字节表示的汉子就硬生生的给掰弯了。
那”朶”字跟’\’反斜杠又有什么关系? 查询这两字符在编码中的表示得出:
“朶&#C
“\&#C
这样我们就看到”朶”字的低位字节和”\”字符相同,都是0x5C,如果这时候”朶”字后边不是b、r之类的可以被转移ascii字符,cjson就会把这个字节和紧跟其后的一个字节抹掉,所以乱码就产生了。
那我们应该怎么解决这个问题,让cjson可以顺利的支持gbk编码呢,首先我们看看gbk编码是怎么回事,为什么会出现低位字节和ascii冲突的问题.
GB_编码系列
先来了解一下GB系列的编码范围问题:
GB)共收录7445个字符,6763个汉字和682个其他字符。
每个汉字及符号用两个字节表示,为了跟ascii兼容,处理程序使用EUC存储方法。
汉字的编码范围
高字节: 0xB0 &#,
低字节: 0xA1 – 0xFE,
占用72*94=FA &#FE未使用。
GBK共收录21886个字符,采用一字节和双字节编码。
单字节表示范围
8位: 0x0 &#F
双字节表示范围
高字节: 0x81 – 0xFE
低字节: 0x40 &#E、0x80 – 0xFE
GB18030收录70244个汉字,采用1、2、4字节编码。
单字节范围
8位: 0x0 &#F
双字节范围
高字节: 0x81 – 0xFE
低字节: 0x40 – 0xFE
四字节范围
第一字节:0x81 – 0xFE
第二字节:0x30 &#
第三字节:0x81 – 0xFE
第四字节:0x30 &#
由于GB类的编码都是向下兼容的,这里就有一个问题,因为GB2312的两个字节的高位都是1,符合这个条件的码位只有128*128=16384个。GBK和GB18030都大于这个数,所以为了兼容,我们从上面的编码范围看到,这两个编码都用到了低位字节的最高位可以为0的情况。
最终得出的结论就是,在GBK编码中只要该字符是两个字节表示,并且低位字节是0x5C的字符都会被cjson弄成乱码.
1) 不要使用gbk编码,将你的字符串转换成utf-8编码.
2) 对cjson源码稍微做个改动,就是在每个字节到来之前先判断该字节是否大于127,如果大于则将该字节个随后的一个字节放过,否则交给cjson去处理。
原创文章,转载请注明: 转载自本文链接地址:
Latest posts by deyimsf ()
Related posts:
(3 votes, average: 4.67 out of 5)
Loading...JAVA对象转化JSON出现死循环问题 - goodstyle - 博客园
主要是解决JSON因Hibernate映射生成的集合的转化出现的死循环问题。
这个方法很重要
public String ajaxJsonByObjectDirecdt(Object obj, String[] filterNames){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//防止自包含
if(filterNames != null){
//这里是核心,过滤掉不想使用的属性
jsonConfig .setExcludes(filterNames) ;
JSONObject jsonObj = JSONObject.fromObject(obj, jsonConfig);
//ajax()方法主要功能是将数据通过输出流输出到Client
return ajax(jsonObj.toString(), "text/html");
对于参数,String[] filterNames,这个字符串数组中存放的是变量的名字(句柄),而不是变量的类型。
public String getUserLoginInfo(){
User user = (User)getSession().getAttribute(USER);
//要过滤的属性集合
String[] filterNames =
new String[]{"role", "operatingHistories", "helpInfoBoards", "replyInfos",
"helpInfos", "credits", "users", "user",
"helpInfoBoard"};
return ajaxJsonByObjectDirecdt(user, filterNames);
其中User类含有以下属性:
1 public class User implements java.io.Serializable {
private String studentN
private String fixedT
private Timestamp registerD
private String imgU
private Timestamp totalOnlineD
private Set&OperatingHistory& operatingHistories = new HashSet&OperatingHistory&(
private Set&HelpInfoBoard& helpInfoBoards = new HashSet&HelpInfoBoard&(0);
private Set&ReplyInfo& replyInfos = new HashSet&ReplyInfo&(0);
private Set&HelpInfo& helpInfos = new HashSet&HelpInfo&(0);
private Set&Credit& credits = new HashSet&Credit&(0);
//more methods.
两端代码参照下,就知道怎么使用了。
后台异常信息:
com.opensymphony.xwork2.config.ConfigurationManager
2 Detected container provider org.apache.struts2.convention.ClasspathConfigurationProvider@67b0eb2c needs to be reloaded.
Reloading all providers.
com.opensymphony.xwork2.config.ConfigurationManager
4 Detected package provider org.apache.struts2.convention.ClasspathConfigurationProvider@67b0eb2c needs to be reloaded.
Reloading all providers.
com.opensymphony.xwork2.config.ConfigurationManager
6 Detected package provider org.apache.struts2.convention.ClasspathConfigurationProvider@31af5c3 needs to be reloaded.
Reloading all providers.
com.opensymphony.xwork2.config.ConfigurationManager
8 Detected package provider org.apache.struts2.convention.ClasspathPackageProvider@5efcd6cc needs to be reloaded.
Reloading all providers.
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
10 Parsing configuration file [struts-default.xml]
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
12 Parsing configuration file [struts-plugin.xml]
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
14 Parsing configuration file [struts.xml]
com.opensymphony.xwork2.config.impl.DefaultConfiguration
16 Overriding property struts.i18n.reload - old value: false new value: true
com.opensymphony.xwork2.config.impl.DefaultConfiguration
18 Overriding property struts.configuration.xml.reload - old value: false new value: true
org.apache.struts2.config.BeanSelectionProvider
20 Loading global messages from i18n
org.apache.struts2.spring.StrutsSpringObjectFactory
22 Initializing Struts-Spring integration...
com.opensymphony.xwork2.spring.SpringObjectFactory
24 Setting autowire strategy to name
org.apache.struts2.spring.StrutsSpringObjectFactory
26 ... initialized Struts-Spring integration successfully
01:07:12 Test: Reloading class 'student.life.support.platform.action.BaseAction'.
28 hql:from student.life.support.platform.model.User as model where model.username = ?
29 Hibernate:
user0_.id as id62_,
user0_.address as address62_,
user0_.age as age62_,
user0_.answer as answer62_,
user0_.email as email62_,
user0_.fixed_telephone as fixed6_62_,
user0_.img_url as img7_62_,
user0_.nickname as nickname62_,
user0_.password as password62_,
user0_.phonenumber as phonenu10_62_,
user0_.qq as qq62_,
user0_.question as question62_,
user0_.register_date as register13_62_,
user0_.role_id as role18_62_,
user0_.sex as sex62_,
user0_.student_num as student15_62_,
user0_.total_online_date as total16_62_,
user0_.username as username62_
studentlifesupportplatform.user user0_
user0_.username=?
net.sf.json.JSONObject
54 Property 'handler' has no read method. SKIPPED
55 Hibernate:
role0_.id as id61_0_,
role0_.role_permissions as role2_61_0_,
role0_.role_type as role3_61_0_
studentlifesupportplatform.role role0_
role0_.id=?
64 Hibernate:
users0_.role_id as role18_1_,
users0_.id as id1_,
users0_.id as id62_0_,
users0_.address as address62_0_,
users0_.age as age62_0_,
users0_.answer as answer62_0_,
users0_.email as email62_0_,
users0_.fixed_telephone as fixed6_62_0_,
users0_.img_url as img7_62_0_,
users0_.nickname as nickname62_0_,
users0_.password as password62_0_,
users0_.phonenumber as phonenu10_62_0_,
users0_.qq as qq62_0_,
users0_.question as question62_0_,
users0_.register_date as register13_62_0_,
users0_.role_id as role18_62_0_,
users0_.sex as sex62_0_,
users0_.student_num as student15_62_0_,
users0_.total_online_date as total16_62_0_,
users0_.username as username62_0_
studentlifesupportplatform.user users0_
users0_.role_id=?
net.sf.json.JSONObject
91 Property 'transactionTimeout' has no read method. SKIPPED
net.sf.json.JSONObject
93 Property 'URL' has no read method. SKIPPED
net.sf.json.JSONObject
95 Property 'array' has no read method. SKIPPED
net.sf.json.JSONObject
97 Property 'asciiStream' has no read method. SKIPPED
net.sf.json.JSONObject
99 Property 'bigDecimal' has no read method. SKIPPED
net.sf.json.JSONObject
101 Property 'binaryStream' has no read method. SKIPPED
net.sf.json.JSONObject
103 Property 'blob' has no read method. SKIPPED
net.sf.json.JSONObject
105 Property 'boolean' has no read method. SKIPPED
net.sf.json.JSONObject
107 Property 'byte' has no read method. SKIPPED
net.sf.json.JSONObject
109 Property 'bytes' has no read method. SKIPPED
net.sf.json.JSONObject
111 Property 'characterStream' has no read method. SKIPPED
net.sf.json.JSONObject
113 Property 'clob' has no read method. SKIPPED
freemarker.runtime
115 Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
116 Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
117 The problematic instruction:
118 ----------
119 ==& ${msg[0]} [on line 68, column 29 in org/apache/struts2/dispatcher/error.ftl]
120 ----------
122 Java backtrace for programmers:
123 ----------
124 freemarker.template.TemplateModelException: Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)
at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)
at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
at freemarker.core.Environment.visit(Environment.java:417)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:797)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
175 Caused by: java.lang.NullPointerException
at freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)
... 49 more
1:07:12 org.apache.catalina.core.StandardWrapperValve invoke
180 严重: Servlet.service() for servlet [default] in context with path [/StudentLifeSupportPlatformSystem] threw exception
181 java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:451)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:801)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
欢迎讨论交流,&
& & & & & & & & & & 我的邮箱:zone.technology.

我要回帖

更多关于 java读取json文件 的文章

 

随机推荐