关于json解析时异常org.json.JSONException: A JSONObject text must begin with '{' at character 1 of {的解决方法

来源:https://blog.csdn.net/xiechengfa/article/details/45559223

出现这个异常的原因是json串格式不正常,没有"{"开始或没有"}"结尾,仔细检查下json文件的格式一般就可以解决这个问题。但是有时候json文件是正常的,仍然有这个异常信息,怎么办呢,这个是因为你的json文件头里带有编码字符(如UTF-8等),读取字符串时json串是正常的,但是解析就有异常,一般会出现这样的情况是读取的json串是来自于服务器或本地的文件,文件头里自带编码,就我碰到情况来看在Android2.1的手机会报异常,高于2.1的手机是正常的。


解决方法:我们来看看带编码的文件有什么不同,用UE打开带编码和不带编码的json文件,然后切换到HEX 模式,会发现带编码的文件比不带编码的文件多三个字节,读取带编码的文件时只要不读取前三个字节,这样就可以正常解析了。
带UTF-8编码的文件:

不带编码的文件:

技术交流QQ群:6399844

如何解决这个问题呢?

第一种办法是:换一个解析器;

第二种种办法是用一个java的类与它相对应,把json数据转成java的对象。参见:

https://zhidao.baidu.com/question/2137828924273144148.html?qbl=relate_question_1&word=net.sf.json.JSONException%BD%E2%CE%F6%D3%D0%B1%E0%C2%EB

JSON格式的String 怎么转成 net.sf.json.JSONObject 30

我有一串json格式的String 现在想给转成JSONObject 我还另写了一个方法 是对net.sf.json.JSONObject做的处理 让其变成对应的java类 但是现在怎么有String转成JSONObject完成不了 请帮忙 注:不是用org.json.simple.JSONObject里面的JSONValue.para...

String jstr="{'json':'jsonvalue','bool':true,'int':1,'double':'20.5'}";
JSONObject json=JSONObject.fromObject(jstr);
boolean bool=json.getBoolean("bool");
int i=json.getInt("int");
double d=json.getDouble("double");
String value=json.getString("json");
System.out.println("bool="+String.valueOf(bool)+"\tjson="+value+"\tint="+i+"\tdouble="+d);

假如你是有一个bean对象
class User{
private String name;
private String psw;
//封装getter/setter省略
}
String u="{'name':'sail331x','psw':'123456789'}";
User user=(User)JSONObject.toBean(JSONObject.fromObject(u),User.class);
就可以了。
把一个user变成json对象:
JSONObject juser=JSONObject.fromObject(user);
String jstr=juser.toString();//这个就变成json字符串了

猜你喜欢

转载自blog.csdn.net/jintingbo/article/details/81141279