【问题标题】:Get JavaScript-Object from String从字符串中获取 JavaScript 对象
【发布时间】:2018-06-17 20:55:40
【问题描述】:

当有:

var text ='{"parameter":"value"}';

我可以使用 JSON.parse(text);创建一个 JavaScript 对象。

问题: 我有来自 axios.default.post 请求的'{ parameter: "value" }'。 JSON.parse 会为此引发错误。

那么,我怎样才能从中创建一个对象呢?

***编辑***** 响应来自 axios 请求。我现在通过transformResponse对其进行了调试,在那个阶段,数据仍然是{“parameter”:“value”}。因此,Axios 通过删除“;必须弄清楚为什么”来制造我的问题。

感谢您的回答,我会及时通知您。

【问题讨论】:

  • 你从哪里得到那个字符串?在我看来,那里存在问题,而不是如何将其转换为对象。
  • 你能说出错误是什么吗?
  • 这不是有效的 JSON。所以 JSON.parse 无济于事。但是怎么了?你似乎已经有了一个对象。就用它吧。
  • 响应来自一个 axios 请求。我现在通过transformResponse对其进行了调试,在那个阶段,数据仍然是{“parameter”:“value”}。因此,Axios 通过删除“;”来制造我的问题;必须弄清楚为什么。感谢您的回答,我会及时通知您。

标签: javascript string typescript object


【解决方案1】:

问题在于 Axios,当从服务器接收 JSON 时,Axios 似乎将其格式化为不同的格式,即使在执行“typeof”时它仍然是一个字符串。

我的解决方案是将 responseType="text" 添加到请求的配置中。 这样,我收到一个文本,我可以用 JSON.parse 解析它。

但是,这在某种程度上并不完美,因为 Axios 提供 JSON 格式,因此,如果有人对“我如何使用 Axios 格式的结果”有答案,我很乐意知道。

【讨论】:

    【解决方案2】:

    我认为你应该让 api 响应正确的 json 有效数据。我不建议通过前端处理这个无效的 json 字符串。


    更新:

    根据您的问题,您是否尝试过此配置?

    // `transformResponse` allows changes to the response data to be made before
    // it is passed to then/catch
    transformResponse: [function (data) {
      // Do whatever you want to transform the data
          return data;
    }],
    

    希望有帮助

    【讨论】:

    • 好吧,这不是我的 API ;) 但请看下面的答案
    【解决方案3】:

    '{ parameter: "value"}' 不是 JSON,因为您可能已经知道,因为密钥没有用引号括起来。您可以使用一个技巧将 javascript 对象字符串转换回对象。

    正如@ASDFGerte 所指出的,如果您不确定字符串的来源,这不是一种安全的方法。

    function parse(str) {
      return Function('"use strict";return (' + str + ')')();
    }
    
    const obj = parse('{ parameter: "value"}');
    
    console.log(obj);

    【讨论】:

    • 我建议不要在这里使用evalFunction 构造函数,尤其是如果不能绝对确定字符串是否来自安全来源。
    • 这是真的。
    猜你喜欢
    • 2021-03-03
    • 2011-08-04
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2013-06-06
    相关资源
    最近更新 更多