Анализ данных JSON - PullRequest
       4

Анализ данных JSON

0 голосов
/ 30 августа 2018
$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 голосов
/ 30 августа 2018

Рабочее временное решение (нет, лучше, временное обходное решение ) заключалось бы в использовании функции 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() настоятельно не рекомендуется : Почему использование функции eval в JavaScript - плохая идея?

0 голосов
/ 30 августа 2018

Если это 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]
})

Если вы думаете, что ваши значения могут содержать : или ,, вам, возможно, придется сделать какой-то другой трюк с регулярным выражением.

0 голосов
/ 30 августа 2018

Чтобы получить количество, вы должны проанализировать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...