JSON数据解析

问题描述 投票:0回答:3
$scope.partsLinesTest = data[0].instock; // this is getting the JSOn data 
from my http request

for(var i=0; $scope.partsLinesTest.length > 0; i++) {
 //$scope.partsLinesTest =  $scope.partsLinesTest[0].instock;
console.log($scope.partsLinesTest.replace(/['{[\]}']/g,''))
var str = $scope.partsLinesTest;
$scope.partsLinesStock = str.replace(/['{[\]}']/g,'');
}

Json数据有点格式化如下,我的问题是instock由于额外的常规括号和花括号这就是为什么我认为使用RegEX会解决问题,但我似乎无法正确迭代数据并将其发回进入视图,我也在使用Angular

var test = [
  {
      "id": 1,
      "title": "This is a document",
      "desc": "PO",
      "date": "2017-01-15",
      "instock": "[{'branch': 'Edmonton', 'quantity': 2}]"
  }
javascript angularjs json
3个回答
0
投票

一个工作的临时解决方案(不,更好,一个临时的解决方法)将是使用Javascript的eval()函数(你不应该在生产系统上做,因为它会打开安全漏洞!):

var test = [
  {
      "id": 1,
      "title": "This is a document",
      "desc": "PO",
      "date": "2017-01-15",
      "instock": "[{'branch': 'Edmonton', 'quantity': 2}]"
  }]
  
console.log(eval(test[0].instock))
console.log(Array.isArray(eval(test[0].instock)))

正如@Quentin所指出的,正确的解决方案是让服务器发出格式正确的JSON(这需要用转义的双引号'替换单引号\")。

请阅读为什么强烈建议不要使用eval()Why is using the JavaScript eval function a bad idea?


0
投票

如果它是JSON-esque你知道它将有,:划分键和值。我首先清理所有其他角色并将其拆分为:

var jsonString = "[{'branch': 'Edmonton', 'quantity': 2}]"
var cleaned = jsonString.replace(/[^a-zA-Z0-9:,]/g,'')
  //"branch:Edmonton,quantity:2"

var splitIntoKeyVal = cleaned.split(',').map(function(row){ return row.split(':')})
  //[["branch","Edmonton"],["quantity],2]]
var json = {}

splitIntoKeyVal.forEach(function(row){
  json[row[0]] = row[1]
})

如果你认为你的值可能包含:,,你可能需要做一些其他的正则表达式技巧。


-1
投票

为了获得数量,你必须解析data.instock json。

var data = {
     "id": 1,
     "title": "This is a document",
     "desc": "PO",
     "date": "2017-01-15",
     "instock": '[{"branch": "Edmonton", "quantity": 2}]'
};

    
var stock = JSON.parse(data.instock);

console.log(stock[0].quantity); 
//$scope.partsLinesStock = stock[0].quantity;
© www.soinside.com 2019 - 2024. All rights reserved.