我正在使用net.sf.json.JSONObject创建一些要发送到前端应用程序的数据,而我正在与之交互的代码不喜欢它为每个字段名称添加引号的方式。
例如:
myString = new JSONObject().put("JSON", "Hello, World!").toString();
生成字符串{“JSON”:“Hello,World”}。
我希望它返回的是{JSON:“你好,世界”} - 没有围绕“JSON”的引号。我该怎么做才能实现这一目标?
答案 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)
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)