删除JSONObject中的引号

时间:2010-06-01 18:24:24

标签: java json

我正在使用net.sf.json.JSONObject创建一些要发送到前端应用程序的数据,而我正在与之交互的代码不喜欢它为每个字段名称添加引号的方式。

例如:

 myString = new JSONObject().put("JSON", "Hello, World!").toString();

生成字符串{“JSON”:“Hello,World”}。

我希望它返回的是{JSON:“你好,世界”} - 没有围绕“JSON”的引号。我该怎么做才能实现这一目标?

5 个答案:

答案 0 :(得分:5)

我遇到了一些Web应用程序/库,例如amCharts,它们支持JSON,如JavaScipt输入,而您的请求是必需的,因为不支持真正的JSON。

你可以做的是创建一个通用的javascript函数,并使用一点RegEx来过滤JSON。

function CleanJSONQuotesOnKeys(json) {
    return json.replace(/"(\w+)"\s*:/g, '$1:');
}

答案 1 :(得分:1)

我可以问你为什么要这样做吗?它不会节省请求中传输的大部分字节数。

无论如何,我要说你必须写一些东西,一个正则表达式或其他东西,将/\"([^"]+)\"\:/替换为第一个匹配$1。我不能流利使用Java,所以我实际上无法提供帮助。

答案 2 :(得分:1)

javadoc

  

toString生成的文本   方法严格遵循JSON   sysntax规则。

如果要符合JSON语法规则,则不要删除引号。

或者,如果您不关心规则,您可以创建自己的简单方法来构造此字符串。

另外,替换2个引号的第一次出现是有效的,正如@CharlesLeaf所说。

答案 3 :(得分:1)

JSON definition将每对描述为字符串:value,因此您不能指望net.sf库违反该特定合同。如果您担心在返回某些javascript代码时能够访问这些值(如果这就是您正在做的事情),那么您无需这样做。

var str = {"JSON": "Hello, World"};
var obj = eval(str);
alert(obj.JSON); // Alerts "Hello, World"

答案 4 :(得分:0)

您可以使用以下方法从json中的属性名称中排除引号:

net.sf.json.util.WebUtils.toString(JSONObject);

请参阅java doc