JSON数据解析

时间:2018-08-30 14:58:07

标签: javascript angularjs json

$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数据的格式如下所示,由于额外的常规括号和花括号,我的问题是库存问题,这就是为什么我认为使用RegEX可以解决问题,但是我似乎无法正确地遍历数据和将其发布回视图,我也使用Angular

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

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

如果它是JSON式的,则您将知道function HanussePick(rates,maxrate) site = rand(1:N^2) slider = rand() * maxrate return(site,rates[site]-slider) end ,会划分键和值。我将从清除所有其他字符并将其拆分为这些字符开始:

:

如果您认为自己的值中可能包含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] }) :,则可能需要进行其他一些正则表达式欺骗。

答案 2 :(得分:-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;