制作JSON时Java未终止对象错误

时间:2016-01-03 17:42:01

标签: java json

我正在尝试创建一个看起来像这样的JSON对象:

{
  "values": {
    "barcode": "{"title":"611269991000grant"}"
  }
}

请注意,条形码的值只是一个字符串。这是我写的:

// title = 611269991000grant
params = new JSONObject("{\"values\": {\"barcode\":" + "\"{\"title\":\"" +  title + "\"}\" } }");

但问题是,这会引发一个例外

Unterminated object at character 26 of {"values": {"barcode":"{"title":"611269991000grant"}" } }

任何人都知道我做错了什么?

3 个答案:

答案 0 :(得分:0)

这是无效的 JSON 。变化

params = new JSONObject("{\"values\": {\"barcode\":" + "\"{\"title\":\"" +  title + "\"}\" } }");

params = new JSONObject("{\"values\": {\"barcode\":" + "{\"title\":\"" +  title + "\"} } }");

这样你的 JSON 最终会成为:

{
  "values": {
    "barcode": {"title":"611269991000grant"}
  }
}

答案 1 :(得分:0)

如果您的意图是barcode的值是文档的字符串表示形式而不是文档,那么

"{"title":"611269991000grant"}"

无效,您可以使用"替换内部双引号\,或者使用单引号"替换内部双引号'

{
  "values": {
    "barcode": "{'title':'611269991000grant'}"
  }
}

{
  "values": {
    "barcode": "{\"title\":\"611269991000grant\"}"
  }
}

答案 2 :(得分:0)

找到解决我问题的方法:

String jsonobj = "{\\\"title\\\":\\\"" +  title + "\\\"}";
params = new JSONObject("{\"values\": {\"barcode\":\"" + jsonobj + "\"} }");

我需要加倍转义,因为条形码的值是通过流发送的,我仍然需要它是JSON格式。所以我的程序现在将JSON对象读作

{"values":{"barcode":"{\"title\":\"611269991000,grant\"}"}}

并将条形码值发送到流并由webapp读取为

{"title":"611269991000,grant"}

伪JSON!我忘了提到条形码值只能包含一个字符串,这就是我试图做魔术的原因。