pol*_*ear 263 javascript json newline
我已经生成了一些JSON,我试图将它拉入JavaScript中的对象.我一直在收到错误.这就是我所拥有的:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
unterminated string literal
Run Code Online (Sandbox Code Playgroud)
有了JSON.parse(data),我看到类似的错误消息:Unexpected token ?Chrome中的" unterminated string literal"和Firefox和IE中的" ".
当我取出\n后sometext,错误消失了两种情况.我似乎无法弄清楚为什么\n制造eval和JSON.parse失败.
Bla*_*laM 338
我想这就是你想要的:
var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';
Run Code Online (Sandbox Code Playgroud)
(您需要转义字符串中的"\"(将其转换为双 - "\"),否则它将成为JSON源中的换行符,而不是JSON数据.)
man*_*h_s 34
你需要有它取代的功能\n来\\n的情况下,data是不是一个字符串文字.
function jsonEscape(str) {
return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t");
}
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = JSON.parse(jsonEscape(data));
Run Code Online (Sandbox Code Playgroud)
结果dataObj将是
Object {count: 1, stack: "sometext\n\n"}
Run Code Online (Sandbox Code Playgroud)
TLDR:作者问题的解决方案。
使用String.raw文字:
var data = String.raw`{"count" : 1, "stack" : "sometext\n\n"}`;
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这里的所有答案都集中在如何在 JavaScript 中解析 JSON 字符串表示,这可能会导致关于如何在实际 JSON 上表示换行符的混淆。后者不依赖于语言。
严格基于问题标题:
假设您使用以下代码解析 JSON 文件node(尽管它可以是任何语言):
let obj = JSON.parse(fs.readFileSync('file.json'));
console.log(obj.mykey)
Run Code Online (Sandbox Code Playgroud)
以下是每个可能内容的输出file.json:
输入 1:
{
"mykey": "my multiline
value"
}
Run Code Online (Sandbox Code Playgroud)
输出 1:
SyntaxError: Unexpected token
Run Code Online (Sandbox Code Playgroud)
输入 2:
SyntaxError: Unexpected token
Run Code Online (Sandbox Code Playgroud)
输出 2:
my multiline
value
Run Code Online (Sandbox Code Playgroud)
输入 3:
{
"mykey": "my multiline\nvalue"
}
Run Code Online (Sandbox Code Playgroud)
输出 3:
my multiline\nvalue
Run Code Online (Sandbox Code Playgroud)
要在json文件中表示换行符,我们应该使用\n字符. 要表示\n我们应该使用\\n.
当我们需要在 JavaScript 中定义一个包含 JSON 的字符串时,事情会发生一些变化,因为\nJavaScript 也具有特殊含义。但也要注意String.raw文字是如何解决这个问题的。
输入 1:
my multiline
value
Run Code Online (Sandbox Code Playgroud)
输入 2:
{
"mykey": "my multiline\\nvalue"
}
Run Code Online (Sandbox Code Playgroud)
输入 3:
my multiline\nvalue
Run Code Online (Sandbox Code Playgroud)
要json在 javascript 中定义字符串,最简单的方法是使用String.raw,因为它不需要任何转义(除了像这样转义的反引号String.raw`abc${"`"}def` )。
当然,json在 javascript 中创建的最简单方法,通常是将 javascript 对象转换为 json(使用JSON.stringify)。
根据规范:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
Run Code Online (Sandbox Code Playgroud)
所以你不能直接传递U+0022或U+0022编码.这是被禁止的!规格建议使用的转义序列用于从一些明确定义的代码U+005C来U+0000:
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
Run Code Online (Sandbox Code Playgroud)
由于大多数编程语言都U+001F用于引用,你应该转义转义语法(双转义 - 一次用于语言/平台,一次用于Json本身):
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
Run Code Online (Sandbox Code Playgroud)
好吧,当只需使用 1 个 CSS 类即可完成时,实际上没有必要为此创建一个函数。
只需将您的文字包裹在该类中即可看到神奇之处:D
<p style={{whiteSpace: 'pre-line'}}>my json text goes here \n\n</p>
Run Code Online (Sandbox Code Playgroud)
注意:因为您始终会在前端使用 HTML 呈现文本,所以您可以将 style={{whiteSpace: 'pre-line'}} 添加到任何标记,而不仅仅是 p 标记。
| 归档时间: |
|
| 查看次数: |
410635 次 |
| 最近记录: |