使用JSON-lib时JSONObject
,如何阻止该put
方法存储包含JSON的字符串作为JSON而不是转义字符串?
例如:
JSONObject obj = new JSONObject();
obj.put("jsonStringValue","{\"hello\":\"world\"}");
obj.put("naturalStringValue", "\"hello world\"");
System.out.println(obj.toString());
System.out.println(obj.getString("jsonStringValue"));
System.out.println(obj.getString("naturalStringValue"));
印刷品:
{"jsonStringValue":{"hello":"world"},"naturalStringValue":"\"hello world\""}
{"hello":"world"}
"hello world"
我希望它打印:
{"jsonStringValue":"{\"hello\":\"world\"}","naturalStringValue":"\"hello world\""}
{"hello":"world"}
"hello world"
是的,我意识到这很令人讨厌。但是,这是为了支持JSON序列化管道,出于互操作性的考虑,这是预期的行为。在某些情况下,我们会序列化可能是/包含有效JSON的用户输入。我们不希望用户输入成为将输入序列化的JSON对象的一部分。
手动转义不起作用,因为它会导致JSON-lib转义\
字符:
JSONObject obj = new JSONObject();
obj.put("naturalJSONValue","{\"hello\":\"world\"}");
obj.put("escapedJSONValue", "{\\\"hello\\\":\\\"world\\\"}");
System.out.println(obj.toString());
System.out.println(obj.getString("naturalJSONValue"));
System.out.println(obj.getString("escapedJSONValue"));
输出:
{"naturalJSONValue":{"hello":"world"},"escapedJSONValue":"{\\\"hello\\\":\\\"world\\\"}"}
{"hello":"world"}
{\"hello\":\"world\"}
此时,任何启用手动选择性转义复杂JSON对象的变通办法都将完全否定使用JSON-lib的价值。
另外,我知道以前曾有人问过这个问题,但是很遗憾,我不能轻易接受它的回答。JSON-
lib在我的项目的许多领域中都是使用率很高的依赖项,而将其换出将是一项艰巨的任务。我必须绝对确定,在可以交换到Jackson,simple-
json或Gson之前,无法使用JSON-lib实现此目标。
使用单引号将字符串引起来。从文档中:
字符串可以用’(单引号)引起来。
如果字符串不以引号或单引号开头,并且不包含前导或尾随空格,并且不包含以下任何字符,则根本不需要引号:{} [] / \: ,=;
#,如果它们看起来不像数字,并且不是保留字true,false或null。
因此,修改您的示例:
net.sf.json.JSONObject obj = new net.sf.json.JSONObject();
obj.put("jsonStringValue","{\"hello\":\"world\"}");
obj.put("quotedJsonStringValue","\'{\"hello\":\"world\"}\'");
obj.put("naturalStringValue", "\"hello world\"");
System.out.println(obj.toString());
System.out.println(obj.getString("jsonStringValue"));
System.out.println(obj.getString("quotedJsonStringValue"));
System.out.println(obj.getString("naturalStringValue"));
产生:
{"jsonStringValue":{"hello":"world"},"quotedJsonStringValue":"{\"hello\":\"world\"}","naturalStringValue":"\"hello world\""}
{"hello":"world"}
{"hello":"world"}
"hello world"
请注意,如何quotedJsonStringValue
将其视为字符串值而非JSON,并在输出JSON中用引号引起来。
在JSON中,Unicode字符可以使用表示法进行转义。我假设显然是指十六进制的Unicode代码点。 但由于只有4位数字,这是否意味着无法转义
问题内容: 我想使用Javascript生成指向页面的链接。该页面的参数位于我以JSON序列化的Javascript数组中。 所以我想生成一个这样的URL: 我该如何转义JSON字符串(序列化的数组)以将其作为参数包含在URL中? 如果有使用JQuery的解决方案,我会喜欢的。 注意:是的,页面的参数必须位于数组中,因为它们很多。 我想我以后将使用bit.ly缩短链接。 问题答案:
问题内容: 我必须形成一个JSON字符串,其中一个值具有换行符。必须对此进行转义,然后使用AJAX调用发布。任何人都可以提出一种使用JavaScript对字符串进行转义的方法。我没有使用jQuery。 问题答案: 使用您的JSON及其它。然后使用方法和替换所有出现的用。 编辑: 据我所知,还没有知名的JS库可用于转义字符串中的所有特殊字符。但是,您可以链接方法并替换所有特殊字符,如下所示: 但这很
问题内容: 我从公共API接收到一个JSON对象,该对象本身具有一个转义的JSON字符串。 我如何将此属性转换为实际的JSON对象(未转义),以便使用NewtonSoft Json.NET反序列化整个响应? 问题答案: 这是我根据 Sam 的答案使用的可行解决方案:
问题内容: 远程服务器(不在我的控制范围内)发送一个JSON字符串,该字符串具有所有转义的字段名和值。例如,当我执行JSON.stringify(res)时,结果如下: 现在,当我执行alert(res.orderId)时,它说未定义。我认为是因为逃脱了。我该如何解决? 问题答案: 假设这 是显示 的实际值,请考虑: 请注意将JSON.stringify应用于值(这是一个 字符串 ,因为JSON
我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?