【问题标题】:Parse the json string without quotes into json将不带引号的json字符串解析成json
【发布时间】:2018-03-21 08:41:27
【问题描述】:

以下 json 字符串未转换为 json,因为键不在引号内。

{file:"http://video.test.com/media/myvideo.mp4", image:"/category/dt/filename.png", width:"100%", height:"100%", stretching:"uniform", autostart:true, modes:[{type:"flash", src:"/swf/external/player.swf"}, {type:"html5"}]}

我试过了:

  1. JSON.parse -- 它不起作用,因为键不在引号内。

  2. eval('('+str+')') -- 由于某种原因没有转换,出于安全考虑也不太愿意使用此解决方案。

  3. 手动插入双引号分隔冒号 (:) 但我的一个 value,它是一个 url,也有一个冒号,如解决方案中给出的: regular expression add double quotes around values and keys in javascript

为什么把这个字符串转成json难,怎么转换?

var s = '{file:"http://video.test.com/media/myvideo.mp4", image:"/category/dt/filename.png", width:"100%", height:"100%", stretching:"uniform", autostart:true, modes:[{type:"flash", src:"/swf/external/player.swf"}, {type:"html5"}]}';

console.log(eval('(' + s + ')'));

【问题讨论】:

  • 你从哪里得到字符串?我会从那里开始并尝试获取正确的 JSON。
  • var result = eval('('+str+')') 应该可以正常工作
  • 我正在从受信任的第三方提供的一个 html 文件中提取此字符串,他们不支持立即发送 json。
  • 你能把你为此写的代码放上来,让我们知道哪里出了问题吗?
  • 你说[...]they can't support sending json immediately[...],但这是否意味着你对他们如何格式化该字符串没有任何影响?因为最简单的事情是他们将歌曲以适当的 JSON 格式存储在 HTML 文档中。

标签: javascript json regex parsing


【解决方案1】:

主要问题是你从哪里得到字符串,但无论如何,这里有一个解决方案。

var obj = eval('(' + str + ')');
var json = JSON.stringify(obj);

【讨论】:

  • 或者干脆var obj = eval('(' + str + ')');
  • @JaromandaX 我也这么认为,但我接受了 OP 的话,因为它不起作用。
  • 但是......它确实......也许OP没有var obj =:p
  • 是的,它不起作用,它说'str'没有定义,即使它声明在它上面,顺便说一句,我正在使用带有 babel 的 ES6 用 reactjs 代码编写这个。我不确定这是否会阻止这种编码风格。
  • @ParagJadhav 不,您不能使用 RegExp 可靠地解析作为字符串或 JSON 给出的 JavaScript 对象。如果字符串由于某些原因发生更改并且包含一些意外内容,则 RegExp 可能会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2012-07-19
相关资源
最近更新 更多