2014-11-06 2 views
0

json 객체를 반복하고 선택한 값을 배열로 푸시하려고합니다.배열을 조작하여 PHP에서 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", 
    "type": "HardGood" 
    }, 
    { 
    "title": " Rocketfish In-Wall HDMI Cable", 
    "type": " HardGood" 
    } 
] 

아래로 반환 할

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

입니까?

+0

[]] is is 배열. 하지만 JS에서는 배열에 숫자가 아닌 키를 사용할 수 없습니다. ** ANY ** 숫자가 아닌 키는 오브젝트 ('{}')를 사용해야합니다. –

+0

PHP 배열의 각 필드에서 "값 그룹화"를하는 것은 의미가 없습니다. '$ pBB [ 'title'] [0]'이 아닌'$ pBB [0] [ 'title']'에 접근하는 것이 더 합리적입니다 ... 그래서 수정해야합니다 ... – sjagr

+0

'$ pBB = array (),'JSON과 PHP 모두에 대해 훨씬 논리적 인 것처럼 보입니다. ($ obj-> name, 'type'=> $ obj-> type) . – Wrikken

답변

1

my comment on your question에 따라 제품을 가치에 조직화하는 비 전통적인 방법을 사용했습니다. 대신 각 제품을 제목 및 유형이 포함 된 제품별로 별도의 배열로 구성해야합니다. 대신를 사용

$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

고마워요! – Nish

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)); 
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); 
0

JSON 객체를 작성하는 중 오류가 발생했습니다. 실제로 json_decode 함수에서 전달한 문자열은 괜찮습니다. 그러나 배열에서 JSON 객체를 빌드 할 때 문제가 발생합니다.

사용 해달라고

$ PBB = 배열 ​​("제목"=> 어레이() "타입"=> 어레이()); 대신

시도

$ PBB = 배열 ​​(배열 ("제목"=> $ 제목 "타입"=> $ 형));

$ pBB를 Json으로 인코딩하면 정확한 출력을 얻을 수있을 것입니다.

해피 코딩. 이

그것으로 작동하려면

echo json_encode(array_values($pBB)); 

와 위의 라인을 교체 JS (즉, 연속 번호)에 배열 할 수있다처럼 아툴은

당신은 할 필요가
0
echo json_encode($pBB); 

확인 보인다 예상 됨

배열 값은 순차적 정수를 키로 반환합니다.