2017-02-24 237 views
0

我工作的代碼,但它有點失敗:我的JSON響應是一個有效的JSON,因爲我在JSOnLint.com上檢查它。JSON解析問題代碼

因此,這裏是它如果我開始我的JSON具有以下製造麻煩

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      alert(obj[x].id.split('~')[3]); 

      for(var x = 0; x < obj.length; x++){ 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

的一段代碼:

{ 
    "text": "Blue CPR Pocket Mask", 
    "id": "128177000003239005~Blue~YES~10.75" 
}, { 
    "text": "CPR Face Shields", 
    "id": "128177000000138987~CPs~YES~41.83" 
} 

...它拋出一個錯誤:

SyntaxError: Unexpected token , in JSON at position

...但如果我以:

[{ 
     "text": "Blue CPR Pocket Mask", 
     "id": "128177000003239005~Blue~YES~10.75" 
    }, { 
     "text": "CPR Face Shields", 
     "id": "128177000000138987~CPs~YES~41.83" 
    } 
] 

一個有效的JSON,但它與我的代碼失敗,因爲我試圖解析它並使用它的值,但它對我說,ID是未定義的。所以我應該怎麼做才能使它工作。

更新#1

我跟每個人的方法,給了一個嘗試,現在開始我下面的錯誤

TypeError: Cannot use 'in' operator to search for '4592' in 
+0

您有兩個JSON對象,而不是一個。因此,將它們視爲兩個不同的對象,或將它們組合爲另一個對象的數組或內部對象。而且,你爲什麼要解析?它已經是JSON了,不是嗎? – RaR

+0

你的try裏面有多少'console.log(obj)'返回? –

回答

0

你不應該分析它,因爲它的陣列。 另外,您在alert函數中使用的變量「x」在for循環之上。這就是爲什麼你得到的錯誤'ID'是未定義的。

此外,這爲我工作。

var data = [{ 
      "text": "Blue CPR Pocket Mask", 
      "id": "12817700000323900" 
     }, 
     { 
      "text": "CPR Face Shields", 
     "id": "128177000000138987" 
     } 
     ] 
     function test1(){ 
      var obj = data 
      values = []; 
      console.log(obj) 

      for(var x = 0; x < obj.length; x++){ 
       values.push({"label":obj[x].text, "value":obj[x].id, "price":obj[x].id.split('~')[3]}); 
      } 
     } 
     test1() 
0

嘗試使用每一個循環,你的JSON是有效的,如果你有[],因爲您有需要是一個數組中的多個對象

var data = [{ 
 
    "text": "Blue CPR Pocket Mask", 
 
    "id": "128177000003239005~Blue~YES~10.75" 
 
}, { 
 
    "text": "CPR Face Shields", 
 
    "id": "128177000000138987~CPs~YES~41.83" 
 
}]; 
 
var values = []; 
 
$.each(data, function(i, obj) { 
 

 
    values.push({ 
 
    "label": obj.text, 
 
    "value": obj.id, 
 
    "price": obj.id.split('~')[3] 
 
    }); 
 
}); 
 
console.log(values)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

確保你正在收到有效的json對象/字符串

+0

嗨,我改變了代碼,現在我得到這個'TypeError:不能使用'在'運算符搜索'4592'在' – Hane

-1

這是錯誤的JSON:

{},{}; 

這是正確的JSON:

[{},{}]; 
alert(obj[x].id.split('~')[3])

OR

{}; 
0

「X」 是不確定的。 把它放在循環可以解決問題:

for(var x = 0; x < obj.length; x++){ 
     alert(obj[x].id); 
     values.push({ 
     "label":obj[x].text, "value":obj[x].id, 
     "price":obj[x].id.split('~')[3] 
     }); 
    } 
0

的問題是,只是因爲obj變量的指標。

所以這裏是解決方案:

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      //alert(obj[x].id.split('~')[3]); 
      //this guy is creating the issue. 
      //since he's out of the loop where x is declared(out of scope) 
      //Put it inside the loop and thins will work fine. 

      for(var x = 0; x < obj.length; x++){ 
       alert(obj[x].id.split('~')[3]); //Moved here(x is defined in the for loop)! 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

希望這有助於。

1

在您的代碼:

alert(obj[x].id.split('~')[3]); 

此行會導致錯誤:

x is not defined 

移動這條線成環,使其工作。