Java中json数据问题.老报错 A JSONObject text must begin with '{'

jiayouchong 2014-08-05 07:57:23
json数据如下:
{"success":true,"msg":"成功"}


代码如下:

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import net.sf.json.JSONObject;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {

StringBuffer sb = new StringBuffer();
try {
File file = new File("e:\\test.txt");
InputStreamReader read = new InputStreamReader(new FileInputStream(
file),"UTF-8");// 考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while ((lineTxt = bufferedReader.readLine()) != null) {
sb.append(lineTxt);
}
} catch (Exception e) {
e.printStackTrace();
}

String json =sb.toString();
System.out.println(json);
JSONObject jsonobject=JSONObject.fromObject(json);
System.out.println(jsonobject);
}
}


错误如下:

{"success":true,"msg":"成功"}
Exception in thread "main" net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of {"success":true,"msg":"成功"}
at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:527)
at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1112)
at net.sf.json.JSONObject._fromString(JSONObject.java:1337)
at net.sf.json.JSONObject.fromObject(JSONObject.java:187)
at net.sf.json.JSONObject.fromObject(JSONObject.java:156)
at test.Test.main(Test.java:34)

新人,求指导
...全文
22258 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
乌龙 2016-08-10
  • 打赏
  • 举报
回复
楼主解决了吗,我也遇到这个问题,搞了一上午了!
Jack_Jia007 2014-08-05
  • 打赏
  • 举报
回复
后台 : String json = "{success:true,msg:'成功'}"; return json ; 如果是json串里需要用到变量,可以这样写: 比如变量为 temple String json = "{success:\""+temple+"\",msg:'成功'}"; return json ; 前台页面: Ajax执行成功的返回方法 var responseText = response.responseText; var data = eval('('+responseText+')'); alert(data.success); alert(data.msg);
shixitong 2014-08-05
  • 打赏
  • 举报
回复
多一个字符原因:
用文本编辑器(notepad++)打开test.txt文本文件

第一次选择的是红框的编码,这样读出来的字符串长度总是为28(莫名的多了一个字符),会报异常,因为第一个字符不是‘{’
第二次选择的是蓝框的编码,这样读出来的字符串长度就是27,和我们认为的长度一样,也不会报异常
shixitong 2014-08-05
  • 打赏
  • 举报
回复
实际上你读出来的字符串长度有问题,按道理讲应该是27,但是实际上长度为28,前面多了一个空字符
char str[] = sb.toString().toCharArray();
        for(int i=0;i<str.length;i++){
            System.out.println(str[i]);
}
这部分输出时,第一个char为空
shixitong 2014-08-05
  • 打赏
  • 举报
回复
package shi;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import net.sf.json.JSONObject;

public class Test9 {

	public static void main(String[] args) {

		StringBuffer sb = new StringBuffer();
		try {
			File file = new File("F:\\test.txt");
			InputStreamReader read = new InputStreamReader(new FileInputStream(
					file));
			BufferedReader bufferedReader = new BufferedReader(read);
			String lineTxt = null;
			while ((lineTxt = bufferedReader.readLine()) != null) {
				sb.append(lineTxt);
			}
			read.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		char str[] = sb.toString().toCharArray();
		for(int i=0;i<str.length;i++){
			System.out.println(str[i]);
		}
		String json = sb.toString().trim().substring(1);
		//String json = "{\"success\":true,\"msg\":\"成功\"}";
		System.out.println(json);
		System.out.println(json.length());
		JSONObject jsonobject = JSONObject.fromObject(json.trim());
		System.out.println(jsonobject);
	}
}
oh_Maxy 2014-08-05
  • 打赏
  • 举报
回复
引用 2 楼 lsbd1993 的回复:
不行呀,还是一样的错.
你要定义一个类,包含success和msg属性,然后才好用Json转换成目标类的一个实例对象。
jiayouchong 2014-08-05
  • 打赏
  • 举报
回复
不行呀,还是一样的错.
ylovep 2014-08-05
  • 打赏
  • 举报
回复
{{"success":true,"msg":"成功"}}这样试试

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧