【问题标题】:Convert to JS Object转换为 JS 对象
【发布时间】:2018-05-02 11:18:02
【问题描述】:

如何将其转换为 JS 对象:

{"info":["Image has been added"],"success":["No success Sorry!"]}

JSON.parse 抛出错误并说 &quot 不是有效的 JSON。刚接触 JS,不知道如何处理。

我正在使用 express 的 connect-flash 将 flash 消息传输到客户端。为此,我使用以下代码:

if Object.keys(locals.flashes).length !== 0
    script.
      flashArr="#{JSON.stringify(locals.flashes)}"

在客户端,对象的表示不是有效的 JSON。我该如何处理。

【问题讨论】:

  • 无法复制,这里没有错误jsfiddle.net/83vhvv5e
  • {"info":["Image has been added"],"success":["No success Sorry!"]}这已经是一个有效的js对象了,不需要转换
  • 您发布的内容中没有 &quot - 很明显,您发布的内容不是您正在使用的内容 - " 是称为 " 的 HTML 实体
  • 当我使用 JSON.stringify(locals.flashes) 并在客户端获取变量时出现错误。然后在使用 JSON.parse(flashArr) 时,我得到了错误
  • 不,不是,这就是发送/接收后会发生的情况(不确定是哪一端在执行此操作)...尽管检查一下var x = document.createElement('div'); x.innerHTML = '{"info":["Image has been added"],"success":["No success Sorry!"]}'; console.log(JSON.parse(x.textContent)) - 可能会对您有所帮助,但就像您一样显示的实际代码很少,我不能做得更好

标签: javascript json connect-flash


【解决方案1】:

如何将其转化为 JS 对象?

如果我这样尝试,它会返回有效的 JS 对象。我只是使用String.prototyp.replace" 全局替换为"",然后像这样使用JSON.parse() 解析它

invalid_data = '{"info":["Image has been added"],"success":["No success Sorry!"]}';
valid_data = invalid_data.replace(/"/g, '"');
console.log(JSON.parse(valid_data));

【讨论】:

    【解决方案2】:

    按照建议,您需要将 HTML 实体解析为字符,即将" 转换为"。最简单的方法是使用正则表达式:

    var str = '{"info":["Image has been added"],"success":["No success Sorry!"]}';
    
    var obj = JSON.parse(str.replace(/"/g,'"'));
    console.log(obj);

    当然,如果代码中有其他 HTML 实体,最好使用内置的 HTML 解析器:

    var str = '{"info":["Image has been added"],"success":["No success Sorry!"]}';
    
    var el = document.createElement('div');
    el.innerHTML = str;
    
    var obj = JSON.parse(el.textContent);
    console.log(obj);

    但是对于单个实体,replace 可能更快更高效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 2018-01-04
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多