Как манипулировать массивом, чтобы он возвращался как структура json в PHP?

0

Я пытаюсь пропустить json-объект и вытолкнуть выбранные значения в массив.

$json = '
{
    "canonicalUrl": "/v1/products(offers.type=deal_of_the_day)?format=json&apiKey=946n9vuhdkgeyz2qx2dpxd54",
    "currentPage": 1,
    "from": 1,
    "partial": false,
    "products": [
        {
            "active": true,
            "activeUpdateDate": "2014-11-03T19:43:46",
            "lowPriceGuarantee": true,
            "name": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
            "new": false,
            "onSale": true,
            "productId": 1219180376135,
            "regularPrice": 124.99,
            "salePrice": 99.99,
            "sku": 5998225,
            "source": "bestbuy",
            "startDate": "2014-07-06",
            "type": "HardGood"
        },
        {
            "active": true,
            "activeUpdateDate": "2014-11-03T18:03:02",
            "lowPriceGuarantee": false,
            "name": "Rocketfish In-Wall HDMI Cable",
            "new": false,
            "onSale": true,
            "productId": 1218343205770,
            "regularPrice": 29.99,
            "salePrice": 24.99,
            "sku": 2634897,
            "source": "bestbuy",
            "startDate": "2011-08-14",
            "type": "HardGood"
        }
    ],
    "queryTime": "0.004",
    "to": 2,
    "total": 2,
    "totalPages": 1,
    "totalTime": "0.020"
}

';

$json_output = json_decode($json);
$pBB = array("title" => array(), "type" => array());
foreach($json_output->products as $obj){
    array_push($pBB['title']," {$obj->name}");
    array_push($pBB['type']," {$obj->type}" );

}
echo  json_encode($pBB);

вывод вышеуказанного кода

{
  "title": [
    " LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
    " Rocketfish In-Wall HDMI Cable"
  ],
  "type": [
    " HardGood",
    " HardGood"
  ]
}

я хочу вернуть его, как показано ниже

[
  {
     "title": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black",
     "type": "HardGood"
  },
  {
     "title": " Rocketfish In-Wall HDMI Cable",
     "type":  " HardGood"
  }
]

Есть предположения?

Теги:
array-push

5 ответов

1
Лучший ответ

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

$json_output = json_decode($json);
$pBB = array();
foreach($json_output->products as $obj){
    $pBB[] = array(
        'title' => " {$obj->name}", // Not sure why you're using " {$obj->name}" but I preserved it
        'type' => " {$obj->type}", // You could just use $obj->type directly
    );
}
echo  json_encode(array_values($pBB));
  • 0
    Спасибо, это сработало!
1

Попробуй это! вам нужно создать объект и нажать на массив.

$json = ' { "from": 1, "to": 2, "total": 2, "currentPage": 1, "totalPages": 1, "queryTime": "0.004", "totalTime": "0.020", "partial": false, "canonicalUrl": "/v1/products(offers.type=deal_of_the_day)?format=json&apiKey=946n9vuhdkgeyz2qx2dpxd54","products": [ { "sku": 5998225, "productId": 1219180376135, "name": "LG - 1.1 Cu. Ft. Mid-Size Microwave - Black", "source": "bestbuy", "type": "HardGood", "startDate": "2014-07-06","new": false, "active": true, "lowPriceGuarantee": true, "activeUpdateDate": "2014-11-03T19:43:46", "regularPrice": 124.99, "salePrice": 99.99, "onSale": true},{ "sku": 2634897, "productId": 1218343205770, "name": "Rocketfish In-Wall HDMI Cable", "source": "bestbuy", "type": "HardGood", "startDate": "2011-08-14", "new": false, "active": true,"lowPriceGuarantee": false, "activeUpdateDate": "2014-11-03T18:03:02", "regularPrice": 29.99, "salePrice": 24.99, "onSale": true } ] }';

$json_output = json_decode($json);
foreach($json_output->products as $obj){
    $new_obj = new stdClass();
    $new_obj->title = $obj->name;
    $new_obj->type = $obj->type;    
    $pBB[]= $new_obj;
}
echo  json_encode($pBB);
1
$json_output = json_decode($json);
$pBB = array();
foreach($json_output->products as $obj){
    array_push($pBB, array(
        'title' => " {$obj->name}",
        'type' => " {$obj->type}"
    ));
}
echo  json_encode(array_values($pBB));
0

Ошибка при создании объекта JSON. Фактически строка, которую вы передаете в функции json_decode, в порядке, но проблема возникает, когда вы создаете объект JSON из массива.

не использовать

$ pBB = array ("title" => array(), "type" => array());

вместо этого попробуйте

$ pBB = array (array ("title" => $ title, "type" => $ type));

Когда вы кодируете $ pBB в Json, я предполагаю, что он даст вам точный результат.

Счастливое кодирование. Атула

0
echo  json_encode($pBB);

Вам нужно убедиться, что это может быть массив для JS (т.е. последовательная нумерация)

Замените вышеуказанную строку на

echo  json_encode(array_values($pBB));

Чтобы он работал должным образом

значения массива возвращают последовательные ints как ключи

Ещё вопросы

Сообщество Overcoder
Наверх
Меню