简体   繁体   中英

PHP array of objects in JSON

I am working on an API to be able to feed some data in an array in JSON format using PHP.

$newArray = array();
$i=0;
foreach ($resultJSON as $i => $item)
{
    $newArray['result'][$i]['ISO'] =$item['ISO'];
    $newArray['result'][$i]['Country_Name']= $item['Country_Name'];;

    $newArray['result'][$i]['Sector']['Retail']= (int)$item['Retail'];
    $newArray['result'][$i]['Sector']['Food']= (int)$item['Food'];
    $newArray['result'][$i]['Sector']['Transportation']= (int)$item['Transportation'];
    $newArray['result'][$i]['Sector']['Transportation']= (int)$item['Telecom'];
    $newArray['result'][$i]['Sector']['Household_Goods']= (int)$item['Household_Goods'];
    $newArray['result'][$i]['Sector']['Oil_and_Gas']= (int)$item['Oil_and_Gas'];
    $newArray['result'][$i]['Sector']['Electronics']= (int)$item['Electronics'];
    $newArray['result'][$i]['Sector']['Automotive']= (int)$item['Automotive'];
    $newArray['result'][$i]['Sector']['Chemicals']= (int)$item['Chemicals'];
    $newArray['result'][$i]['Sector']['Technology']= (int)$item['Technology'];
    $newArray['result'][$i]['Sector']['Pharmaceuticals']= (int)$item['Pharmaceuticals'];
    $newArray['result'][$i]['Sector']['Construction']= (int)$item['Construction'];
    $newArray['result'][$i]['Sector']['Machinery_and_Equipment']= (int)$item['Machinery_and_Equipment'];
    $newArray['result'][$i]['Sector']['Metals']= (int)$item['Metals'];
    $newArray['result'][$i]['Sector']['Aeronautics']= (int)$item['Aeronautics'];
    $newArray['result'][$i]['Sector']['Business_services']= (int)$item['Business_services'];
    $newArray['result'][$i]['Sector']['Utilities']= (int)$item['Utilities'];
    $newArray['result'][$i]['Sector']['Personal_and_recreational_goods']= (int)$item['Personal_and_recreational_goods'];
    $newArray['result'][$i]['Sector']['Paper']= (int)$item['Paper'];
    $newArray['result'][$i]['Sector']['Other_services']= (int)$item['Other_services'];

    $newArray['result'][$i]['Current_Average']= (int)$item['Current_Average'];
    $newArray['result'][$i]['Forecast_Average']= (int)$item['Forecast_Average'];

    $i++;
}


$resultJSON = (json_encode($newArray, JSON_FORCE_OBJECT));
header('Content-Type: application/json iHYPERLINK');
echo  $resultJSON;

The people that I am building for have said that they would rather have an array of objects.

Currently the output is

{ "result": { "0": { "ISO": "US", "Country_Name": "U.S.", "Sector": { "Retail": 21, "Food": 34, "Transportation": 35, "Household_Goods": 39, "Oil_and_Gas": 50, "Electronics": 61, "Automotive": 49, "Chemicals": 51, "Technology": 67, "Pharmaceuticals": 62, "Construction": 54, "Machinery_and_Equipment": 57, "Metals": 39, "Aeronautics": 56, "Business_services": 54, "Utilities": 44, "Personal_and_recreational_goods": 45, "Paper": 33, "Other_services": 41 }, "Current_Average": 49, "Forecast_Average": 50 }, "1": { "ISO": "CA", "Country_Name": "Canada", "Sector": { "Retail": 1, "Food": 1, "Transportation": 40, "Household_Goods": 52, "Oil_and_Gas": 71, "Electronics": 63, "Automotive": 79, "Chemicals": 45, "Technology": 84, "Pharmaceuticals": 89, "Construction": 59, "Machinery_and_Equipment": 64, "Metals": 34, "Aeronautics": 58, "Business_services": 55, "Utilities": 46, "Personal_and_recreational_goods": 80, "Paper": 39, "Other_services": 47 }, "Current_Average": 55, "Forecast_Average": 56 }

However they have asked for

{"result":[{ "ISO": "US", "Country_Name": "U.S.", "Sector": { "Retail": 21, "Food": 34, "Transportation": 35, "Household_Goods": 39, "Oil_and_Gas": 50, "Electronics": 61, "Automotive": 49, "Chemicals": 51, "Technology": 67, "Pharmaceuticals": 62, "Construction": 54, "Machinery_and_Equipment": 57, "Metals": 39, "Aeronautics": 56, "Business_services": 54, "Utilities": 44, "Personal_and_recreational_goods": 45, "Paper": 33, "Other_services": 41 }, "Current_Average": 49, "Forecast_Average": 50 }, { "ISO": "CA", "Country_Name": "Canada", "Sector": { "Retail": 1, "Food": 1, "Transportation": 40, "Household_Goods": 52, "Oil_and_Gas": 71, "Electronics": 63, "Automotive": 79, "Chemicals": 45, "Technology": 84, "Pharmaceuticals": 89, "Construction": 59, "Machinery_and_Equipment": 64, "Metals": 34, "Aeronautics": 58, "Business_services": 55, "Utilities": 46, "Personal_and_recreational_goods": 80, "Paper": 39, "Other_services": 47 }, "Current_Average": 55, "Forecast_Average": 56 }]}

So they do not want the numbers showing but I have no idea how to do this.

Any help would be appreciated.

Remove the flag JSON_FORCE_OBJECT and remove the plus counter $++ . It should resolve your problem.

$resultJSON = json_encode($newArray);

JSON_FORCE_OBJECT

Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. Available since PHP 5.3.0.

你只需要像下面那样编码数组以避免数组键

$resultJSON = json_encode(array_values($newArray));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM