Генерация объекта JSON на сервере и итерация его на стороне клиента - PullRequest
1 голос
/ 16 февраля 2012

Моя сторона php

   $i = 1;
   while ($row = mysql_fetch_array($query)) {
       $productarray[$i][] = $row['product_id'];
       $productarray[$i][] = $row['product_model'];
       $productarray[$i][] = $row['product_type'];
       $productarray[$i][] = $row['product_return'];
       $i++;
    }
    $jsonstring = json_encode($productarray);

Это то, что я получаю. Это допустимая строка json

{
 "1":["1","HFJ5G1.5","plat","graviteits"],
 "2":["2","HHJ5S2.5","holle plunjer","veer"],
 "3":["3","HTJ5S7.5","inbouw","veer"]
}

Я не могу перебрать кого-то, пожалуйста, скажите мне, как перебрать этот JSON

С сайта json я думаю, что это формат, если так, как я могу изменить вышеуказанную строку json на этот формат?

{
 "1":[{"1","HFJ5G1.5","plat","graviteits"}],
 "2":[{"2","HHJ5S2.5","holle plunjer","veer"}],
 "3":[{"3","HTJ5S7.5","inbouw","veer"}]
}

Ответы [ 4 ]

1 голос
/ 16 февраля 2012

сделать это:

$i = 0;
while ($row = mysql_fetch_array($query)) {
    $productarray[$i]['id'] = $row['product_id'];
    $productarray[$i]['model'] = $row['product_model'];
    $productarray[$i]['type'] = $row['product_type'];
    $productarray[$i]['ret'] = $row['product_return'];
$i++;
}

$jsonstring = json_encode($productarray);

JSON будет выглядеть так:

[
 {id:"1",model:"HFJ5G1.5",type:"plat",ret:"graviteits"},
 {id:"2",model:"HHJ5S2.5",type:"holle plunjer",ret:"veer"},
 {id:"3",model:"HTJ5S7.5",type:"inbouw",ret:"veer"}
]

теперь в JS вы можете зацикливаться как:

for(i=0,i<jsonString.length;i++;){
   id    = jsonString[i].id;
   model = jsonString[i].model;
   type  = jsonString[i].type;
   ret   = jsonString[i].ret;
}
1 голос
/ 16 февраля 2012

Вам нужно немного изменить свой PHP-код. Попробуйте сделать что-то вроде этого:

$productarray = array();
while ($product = mysql_fetch_assoc($query)) { // NOTE: using associative array
    $productarray[] = $product;
}
echo json_encode($productarray);

// Output
// [{
//     "product_id": "1",
//     "product_model": "HFJ5G1.5",
//     "product_type": "plat",
//     "product_rturn": "graviteits"
// }, {
//     "product_id": "2",
//     "product_model": "HHJ5S2.5",
//     "product_type": "holle plunjer",
//     "product_rturn": "veer"
// }, {
//     "product_id": "3",
//     "product_model": "HTJ5S7.5",
//     "product_type": "inbouw",
//     "product_rturn": "veer"
// }]

Обратите внимание, что теперь становится очень легко выполнять итерации. Вы можете сделать это следующим образом:

var o = [{
    "product_id": "1",
    "product_model": "HFJ5G1.5",
    "product_type": "plat",
    "product_rturn": "graviteits"
}, {
    "product_id": "2",
    "product_model": "HHJ5S2.5",
    "product_type": "holle plunjer",
    "product_rturn": "veer"
}, {
    "product_id": "3",
    "product_model": "HTJ5S7.5",
    "product_type": "inbouw",
    "product_rturn": "veer"
}];
for (var i = 0; i < o.length; i++) {
    console.log("Product " + (i + 1) + " has model:" + o[i]["product_model"]);
    console.log("Product " + (i + 1) + " has type:" + o[i]["product_type"]);
}
0 голосов
/ 16 февраля 2012
{
 "1":[{"1","HFJ5G1.5","plat","graviteits"}],
 "2":[{"2","HHJ5S2.5","holle plunjer","veer"}],
 "3":[{"3","HTJ5S7.5","inbouw","veer"}]
}

не является правильным объектом.Когда у вас есть «{}», вам нужно иметь набор «name: value», разделенных комой внутри.

Так что вы можете иметь:

{
 "1":["1","HFJ5G1.5","plat","graviteits"],
 "2":["2","HHJ5S2.5","holle plunjer","veer"],
 "3":["3","HTJ5S7.5","inbouw","veer"]
} 

или

{
 "1":[{nameField1:"1",nameField2:"HFJ5G1.5",nameField3:"plat",nameField4:"graviteits"}], // one object in the array
 ...
} 
0 голосов
/ 16 февраля 2012

Первая строка действительна в формате JSON, вторая - нет.Вы можете проверить онлайн (см. Google, есть веб-сайты проверки синтаксиса JSON) или в консоли браузера с помощью window.JSON.parse () (любой современный браузер, более старые браузеры не имеют window.JSON).Поскольку это объект, вы можете выполнить итерацию с помощью

for (var i in o) {
  //do something with o[i]
}

Или вы можете просто изменить {} для [] и удалить ключевые строки '"":' и получить массив:

//Input JSON string:
//[
//  ["1","HFJ5G1.5","plat","graviteits"],
//  ["2","HHJ5S2.5","holle plunjer","veer"],
//  ["3","HTJ5S7.5","inbouw","veer"]
//]
JSON.parse('[["1","HFJ5G1.5","plat","graviteits"],["2","HHJ5S2.5","holle plunjer","veer"],["3","HTJ5S7.5","inbouw","veer"]]')
//(to test it - works.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...