我正在解析一些数据使用类型类在我的控制器。我得到的数据如下:

{  
   "data":{  
      "userList":[  
         {  
            "id":1,
            "name":"soni"
         }
      ]
   },
   "status":200,
   "config":{  
      "method":"POST",
      "transformRequest":[  
         null
      ],
      "transformResponse":[  
         null
      ],
      "url":"/home/main/module/userlist",
      "headers":{  
         "rt":"ajax",
         "Tenant":"Id:null",
         "Access-Handler":"Authorization:null",
         "Accept":"application/json, text/plain, */*"
      }
   },
   "statusText":"OK"
}

我试着这样存储数据

var userData = _data;
var newData = JSON.parse(userData).data.userList;

如何提取用户列表到一个新变量?


当前回答

错误的原因是对象不是字符串的形式,它是{},它应该是字符串对象('{}')

其他回答

JSON的第一个参数。parse函数应该是一个字符串,而你的数据是一个JavaScript对象,所以它将强制它为字符串“[object object]”。您应该使用JSON。在传递数据之前进行Stringify:

JSON.parse(JSON.stringify(userData))

你发布的JSON看起来很好,但是在你的代码中,它很可能不再是一个JSON字符串,而是一个JavaScript对象。这意味着不需要更多的解析。

你可以自己测试,比如在Chrome的控制台:

new Object().toString()
// "[object Object]"

JSON.parse(new Object())
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse("[object Object]")
// Uncaught SyntaxError: Unexpected token o in JSON at position 1

JSON.parse()将输入转换为字符串。JavaScript对象的toString()方法默认返回[object object],导致所观察到的行为。

试试下面的方法吧:

var newData = userData.data.userList;

第一个在变量中设置请求值:

let reqData = req.body.reqData;
if (reqData) {
  let reqDataValue = JSON.parse(JSON.stringify(reqData));
}

我们还可以添加这样的检查:

function parseData(data) {
    if (!data) return {};
    if (typeof data === 'object') return data;
    if (typeof data === 'string') return JSON.parse(data);

    return {};
}

你可以只检查userData和JSON.parse()的类型,如果它是字符串:

var userData = _data;
var newData;
if (typeof userData === 'object')
  newData = userData.data.userList; // dont parse if its object
else if (typeof userData === 'string')
  newData = JSON.parse(userData).data.userList; // parse if its string