【问题标题】:How to convert object in array js [duplicate]如何在数组js中转换对象[重复]
【发布时间】:2019-06-04 09:08:56
【问题描述】:

我对编程很陌生,我找不到我的问题的解决方案,你能给我解决方案吗?

我有这个 JSON 文件:

{
  "groups": "[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]"
}

我在我的 js 中需要这样的东西(但我想导入我的 JSON 来获得这样的数组):

const groups = [{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]

不使用jQuery我不知道该怎么办。

我已经试过了:

const json = require('./test.json');

此代码返回一个对象:

这几乎是我想要的,但是当我在我的代码中使用它时它不起作用,因为我不想要一个对象,而是我上面说的数组。

如何做到这一点?

【问题讨论】:

  • 你在找JSON.parse(json.groups)
  • 我觉得我错过了什么,你只想要 JSON.parse 吗?
  • 这是 JSON 文件中的 JSON 编码字符串。将" 放在与groups 关联的值附近没有什么意义,我希望没有它们,所以它只是"groups": [{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }] 开始。无论如何,您可以使用JSON.parse(obj.groups) 进行转换
  • jQuery 无关紧要。首先需要解析包含数组的字符串;命名常量本身是微不足道的,但如果您希望它与对象中的名称相同,那就另当别论了。
  • @Weedoze 不需要JSON.parse 位。

标签: javascript json


【解决方案1】:

groups 的值不是有效的 JSON:字符串值应该用双引号括起来,键也应该如此。该字符串中包含有效 JSON 的文件如下所示:

{
  "groups": "[{ \"id\": 1, \"title\": \"group 1\" }, { \"id\": 2, \"title\": \"group 2\" }]"
}

当然,如果您可以控制此文件的创建,最好将此值作为本机 JSON 内容的一部分,而不是 JSON-in-a-string-inside-JSON。如果这不可能,您需要自己更正字符串中的引用,这可以通过几个正则表达式替换来完成。

/* obj is the object in the JSON file */
var json_str = obj.groups.replace(/'/g,"\"").replace(/([a-z]+)\:/g,"\"$1\":");
var groups = JSON.parse(json_str);

或者,虽然字符串不是有效的 JSON,但它是一个有效的 Javascript 表达式,所以如果文件的内容是可信的,你也可以使用eval:

var groups = eval(obj.groups);

【讨论】:

  • 几乎,但您不需要转义斜杠或替换。工作示例:codepen.io/anon/pen/dwjBdb
  • @suncat100 我不确定你的意思?单引号字符串中的双引号不需要反斜杠转义,但单引号字符串不是有效的 JSON,因此无法以这种方式更改询问者的文件,并且仍然是有效的 JSON 文件。我的回答显示了如何将字符串转换为有效的 JSON,以便可以将其输入JSON.parse(),或者如何使用eval() 回避该要求。您的示例以 JSON 字符串的已更正版本开始,因此您正在向前跳跃。
  • 当然。我现在看到你已经在你的帖子中解释了这一点。当然,他的问题的最终解决方案是首先实际修复他的 JSON ......毕竟,JSON 的首要目的是为代码构建数据,而他将他的数据添加到一个“字符串”中。如果结构合理,它会毫不费力地正确传输到 JS。
  • 提问者没有说他是否可以控制 JSON 文件的内容。我猜他没有,但在我的回答中已经说明了如果他这样做了他能做什么(第 2 段)。
【解决方案2】:

我只需要像这样填充我的数组“组”:

[{ id: 1, title: 'group 1' }, { id: 2, title: 'group 2' }]

有一个json文件,没有jquery

【讨论】:

    【解决方案3】:

    由于我没有注意到原始问题中的“没有 jQuery”,这里是一个新的答案:

    var request = new XMLHttpRequest();
    request.open('GET', './test.json', true);
    
    request.onload = function() {
      if (request.status >= 200 && request.status < 400) {
        // Success!
        var data = JSON.parse(request.responseText);
      } else {
        // We reached our target server, but it returned an error
    
      }
    };
    

    它做了两件事: 1.加载json文件 2.将加载的字符串解析成一个javascript对象。

    【讨论】:

      【解决方案4】:

      在您可以对 JSON 文件进行任何操作之前,您需要先加载它。 jQuery 有一个快捷方式,它甚至会自动为您将 JSON 字符串解析为原生 JS 对象:

      $.getJSON('./test.json', function(data) {
        console.dir(data);
      });
      

      https://api.jquery.com/jquery.getjson/

      【讨论】:

      • 我说没有 jquery ^^
      • 好的,抱歉。无论哪种情况,您都需要做两件事:1) 通过 Ajax (XMLHttpRequest) 加载文件,2) JSON.parse(the_loaded_data)。不幸的是,没有 jQuery,AJAX 请求要长得多。答案基本上就在这里:stackoverflow.com/questions/35294633/…这两个任务没有办法。
      【解决方案5】:

      如果无法编辑原文,需要将'替换为",然后JSON.parse(json.groups);

      否则你可以像这样改变你的json:

      JSON.parse('[{ "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" }]')
      

      小心使用 " 和 ' 括号

      {
        "key":"string"
      }
      

      用'括号定义的字符串无效

      在 JSON 中的键必须在 "" 括号中

      【讨论】:

      • 我做了,但我现在有这个错误 Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse ()
      • 因为你需要'到"
      • 我刚刚在我的 json 中通过了你的 json 并且仍然有错误
      • 抱歉修复 JSON.parse('[{ "id": 1, "title": "group 1" }, { "id": 2, "title": "group 2" } ]')
      【解决方案6】:

      您可以通过这种方式将对象解析为数组:

      Object.values(YOUR_OBJECT)

      文档:https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/values

      【讨论】:

      • 这实际上不会产生 OP 正在寻找的东西。如果YOUR_OBJECT 是文件的内容,那么您只会得到一个数组,其中包含一个描述数组的string。如果它是 groups 键的值,那么它将产生(本质上)乱码,因为您要从字符串中获取所有键的值。
      • 哦,我没注意到 :S
      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2021-09-29
      • 2018-09-12
      • 2020-07-18
      • 2020-07-14
      • 2023-03-19
      • 2021-06-03
      相关资源
      最近更新 更多