我从Instagram上拉JSON:
$instagrams = json_decode($response)->data;
然后将变量解析为PHP数组以重构数据,然后重新编码和缓存文件:
file_put_contents($cache,json_encode($results));
当我打开缓存文件时,所有正斜杠"/"都被转义:
http:\/\/distilleryimage4.instagram.com\/410e7...
我从搜索中收集json_encode()自动执行此操作...有没有办法禁用它?
我需要用JSON发送日期.日期字符串应如下所示:
"2013年5月15日"
相反,JSONObject.toString逃避它如下:
"2013\/ 5\/ 15"
我知道这样做是为了允许在脚本标签内部使用json字符串,因为这个问题解释了: JSON:为什么正斜杠被转义了?
但就我而言,我并不需要它.实际上服务器返回错误.服务器没有处理这个,我无法修复服务器,所以我必须在移动客户端代码中修复它.
String.replace序列化后我可以做一个,但如果我真的想在JSON的任何其他部分包含"\ /"字符串怎么办?
有没有办法序列化JSON对象而不转义斜杠?(如果可能,不逃避任何事情)
提前致谢.
如何将带有国际字符的json编码字符串保存到数据库,然后在浏览器中解析解码后的字符串?
<?php
$string = "très agréable";
// to the database
$j_encoded = json_encode(utf8_encode($string));
// get from Database
$j_decoded = json_decode($j_encoded);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?= $j_decoded ?>
</html>
Run Code Online (Sandbox Code Playgroud) 可能重复:
JSON:为什么正斜杠被转义?
json.org指出,正斜杠(又名solidus /)可以被转义:
"\/"
Run Code Online (Sandbox Code Playgroud)
但是,未转义的斜杠也是有效的:
"/"
Run Code Online (Sandbox Code Playgroud)
这背后的理性是什么?它来自Javascript根源吗?(即,"</script>"基于浏览器的Javascript中存在问题,请参阅Douglas Crockford的评论)或者有任何其他原因吗?
在Rails 3.1应用程序中,如何安全地将一些JSON数据嵌入到HTML文档中?
假设我在控制器动作中有这个:
@tags = [
{name:"tag1", color:"green"},
{name:"</script><b>I can do something bad here</b>", color:"red"}
]
Run Code Online (Sandbox Code Playgroud)
这在相应的观点中:
<script type="text/javascript" charset="utf-8">
//<![CDATA[
var tags_list = <%= @tags.to_json %>;
// ]]>
</script>
Run Code Online (Sandbox Code Playgroud)
然后我得到这个结果HTML:
var tags_list = [
{"name":"tag1","color":"green"},
{"name":"</script><b>I can do something bad here</b>","color":"red"}
];
Run Code Online (Sandbox Code Playgroud)
这会SyntaxError: Unexpected token &在Chrome中触发
如果我删除Rails的默认HTML转义<%=raw tags.to_json
%>,则返回:
var tags_list = [
{"name":"tag1","color":"green"},
{"name":"</script><b>I can do something bad here</b>","color":"red"}
];
Run Code Online (Sandbox Code Playgroud)
当然,这会破坏HTML文档</script>.
我可以以某种方式告诉to_json()方法返回更像这样的东西:
var tags_list = [
{"name":"tag1","color":"green"},
{"name":"</script><b>I can do something bad …Run Code Online (Sandbox Code Playgroud) 我需要以一种不同寻常的格式为客户输出一些JSON.我的应用程序是用Rails 5编写的.
期望的JSON:
{
"key": "\/Date(0000000000000)\/"
}
Run Code Online (Sandbox Code Playgroud)
时间戳值需要\/在字符串的开头和结尾都有.据我所知,这似乎是.NET服务中常用的一种格式.我试图让斜线正确输出.
我通过单个控制器操作将问题简化为vanilla Rails 5应用程序.到目前为止,我能想到的逃逸的所有排列都失败了.
def index
render json: {
a: '\/Date(0000000000000)\/',
b: "\/Date(0000000000000)\/",
c: '\\/Date(0000000000000)\\/',
d: "\\/Date(0000000000000)\\/"
}
end
Run Code Online (Sandbox Code Playgroud)
其中输出如下:
{
"a": "\\/Date(0000000000000)\\/",
"b": "/Date(0000000000000)/",
"c": "\\/Date(0000000000000)\\/",
"d": "\\/Date(0000000000000)\\/"
}
Run Code Online (Sandbox Code Playgroud)
为了便于讨论,假设格式不能改变,因为它是由第三方控制的.
我已经向Github上传了一个测试应用程序来演示这个问题.https://github.com/gregawoods/test_app_ignore_me
我试图将一些简单的HTML转换为JSON对象中的字符串值,并且我无法使字符串编码无法转义NSJSONSerialization中的字符串.
示例...我有一个包含一些基本HTML文本的字符串:
NSString *str = @"<html><body><p>Samples / Text</p></body></html>";
Run Code Online (Sandbox Code Playgroud)
期望的结果是JSON,其中HTML为值:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples / Text</p></body></html>"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用标准技术将NSDictionary转换为包含JSON的NSString:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:str forKey:@"Instructions"];
[dict setObject:@"My Title" forKey:@"Title"];
NSError *err;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&err];
NSString *resultingString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultingString);
Run Code Online (Sandbox Code Playgroud)
此方法生成的JSON有效,但HTML包含所有正斜杠转义:
{
"Title":"My Title",
"Instructions":"<html><body><p>Samples \/ Text<\/p><\/body><\/html>"
}
Run Code Online (Sandbox Code Playgroud)
这会在JSON字符串指令中创建无效的HTML.
我想坚持使用NSJSONSerialization,因为我们在我们的框架中的其他地方都使用它,并且在切换到非Apple库之前我已经被烧毁了,因为它们得不到支持.我尝试了很多不同的字符串编码,它们都逃脱了尖括号.
显然\ /是JavaScript中对/字符的有效表示,这就是转义正斜杠的原因(即使StackOverflow文本编辑器也将其转义).请参阅: 使用正斜杠转义json字符串? 还有JSON:为什么正斜线逃脱了?.我只是不希望它这样做,似乎没有办法阻止iOS在序列化时转义字符串值中的正斜杠.
flask.json模块的源包含以下行. 什么'\\/'意思,为什么Flask检查这个?
_slash_escape = '\\/' not in _json.dumps('/')
Run Code Online (Sandbox Code Playgroud) 这是对这个问题的延伸:
所以我理解为什么当我创建一个包含每个索引中包含URL(链接)的字符串的JSONArray时,JSON会转义转发斜杠.我现在想知道当我像这样序列化一个字符串时,如何使JSON不能逃脱这些正斜杠:
[['documentary', 'http://www.google.com/#q=documentary']]
Run Code Online (Sandbox Code Playgroud)
进入JSONArray.我正在考虑迭代字符串并删除任何存在反斜杠的实例,但我想知道是否有更有效的方法来执行此操作或使用它以使上述字符串不会自动转义如下:
[['documentary', 'http:\/\/www.google.com\/#q=documentary']]
Run Code Online (Sandbox Code Playgroud)
谢谢!如果有什么不清楚,请告诉我.