Javascript TypeError:data.map不是函数

Javascript TypeError:data.map不是函数,javascript,json,node.js,node-fetch,Javascript,Json,Node.js,Node Fetch,我真的很想知道我错过了什么,我不是javascript方面的专家,如果有人能告诉我我做错了什么,我真的很感激 我有一个工作代码: if (value_ == "group") { fetch("http://localhost/someapi"+value_).then(r => { return r.json()}) .then(json => { var data = `{ "group" : [{"name":"foo","tag":"bar"},{"na

我真的很想知道我错过了什么,我不是javascript方面的专家,如果有人能告诉我我做错了什么,我真的很感激

我有一个工作代码:

if (value_ == "group") {
  fetch("http://localhost/someapi"+value_).then(r => { return r.json()})
  .then(json => {
      var data =  `{ "group" : [{"name":"foo","tag":"bar"},{"name":"bool","tag":"lean"}] }`;
      var data = JSON.parse(data); 
      var groupName = data.group.map(current => current.name);
      var groupTag = data.group.map(current => current.tag);
      console.log(data);         
      console.log(`json: ${data.group[0].name}`);
    });
}
上面的代码可以工作并获得我想要的所有数据,但json来自:

var data =  `{ "group" : [{"name":"foo","tag":"bar"},{"name":"bool","tag":"lean"}] }`;
然后我尝试从URL获取json,该URL返回与上面的var数据相同的值。但它不起作用

我确实改变了var
data=JSON.parse(data)
into
data=JSON.parse(JSON)

并删除“var data=
{“group”:[{“name”:“foo”,“tag”:“bar”},{“name”:“bool”,“tag”:“lean”}]}

它确实给出了一个错误:
(节点:10868)未处理PromisejectionWarning:SyntaxError:JSON输入意外结束

我还尝试了以下代码:

  fetch("http://localhost/someapi"+value_).then(r => { return r.json()})
  .then(json => {
      parseJSON(JSON.stringify(json));
      function parseJSON(str){
        var data = JSON.parse(str); 
        var groupName = data.group.map(current => current.name);
        var groupTag = data.group.map(current => current.tag);
        console.log(data);         
        console.log(`json: ${data.group[0].name}`);
      }

    });
}
这给了我一个错误:
(节点:12668)未处理的PromisejectionWarning:TypeError:无法读取未定义的
的属性“map”


感谢并原谅我的英语。

您不需要手动执行JSON.parse,因为示例第三行中的
JSON
变量的内容已经是一个对象

试试这个:

fetch("http://localhost/someapi"+value_)
.then(r => r.json())
.then(json => {
  var groupName = json.group.map(current => current.name);
  var groupTag = json.group.map(current => current.tag);
  console.log('groupName', groupName);         
  console.log('groupTag', groupTag);         
});

您为什么要执行
JSON.stringify
,然后立即对结果执行
JSON.parse
?为什么不直接说
var data=json?我不确定,但我确实用它来让我的其他代码工作,但它是不同的代码环境。在我的其他代码中,如果我直接使用
var data=json
它会给我
类型错误:无法读取未定义的属性“0”
我不是我所说的那样的专家,所以我只是想弄清楚这里发生了什么,并学会修复它。当你传递
数据
变量时,你的解析方法工作得很好。我认为问题在于
json
变量的内容。您记录了它的内容了吗?如果这是您所要求的,那么我的api url上的json内容与
var=data
中的内容完全相同。要了解获取结果的情况,您可能需要查看为响应获取而发送的实际文本。在开发者工具网络窗格中,或者临时将
r.json()
更改为
r.text()
,然后将
console.log
更改为
var data=json现在就可以工作了。。因此,基本上,如果解析直接来自
获取(“url”)。那么(r=>{return response.json()})。然后json=>{….}
,我在回答中写的几乎相同。您不需要额外的
数据
变量。只需使用
json
变量,然后在
then
回调中接收。响应中的json字符串由
解析。然后(r=>{return response.json()})
。此外,您还可以删除多余的括号,并在此处返回语句。只要
。然后(r=>r.json())
就足够了。是的,但之前是
data.group.map
。但这已经不重要了。我从你的解释中明白了重点。再次感谢!你说得对。我在提交答案后才注意到这个错误。