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.
2 Answers 2
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.
Comments
You just need to encode array like bellow to avoid array key
$resultJSON = json_encode(array_values($newArray));
JSON_FORCE_OBJECT. Just pass no second parameter to yourjson_encode()call.