$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的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?
如果它是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]
})
如果你认为你的值可能包含:
或,
,你可能需要做一些其他的正则表达式技巧。
为了获得数量,你必须解析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;