Я прочитал похожие посты, но все же мог бы использовать некоторую помощь в моем случае … У меня дьявол времени получить значения из массива json, который содержит пары ключ и значение:
{"address": "4 Ficticious Ave",
"city": "Miami",
"country": "United States",
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Doe",
"state": "FL",
"zip_code": "03423",
"response_data":
"[{"key":"7122", "value":"37-52"},
{"key":"7123","value":"Female"},
{"key":"7124","value":"$35,000 to $50,000 USD"},
{"key":"6176","value":"Miami"},
{"key":"6177","value":"FL"},
{"key":"6179","value":"United States"}]"}
Я попытался получить все значения, но безуспешно, особенно с парой ключ-значение response_data: значение:
`// Получить данные JSON из массива $ data
// Identify the content as json
header("Content-Type: application/json; charset=UTF-8");
// get the contents of the JSON file
$data = file_get_contents("php://input");
//decode JSON data to PHP array
$content = json_decode($data, true);
//Fetch the details of customer
$Cust_Fname = $content['first_name'];
$Cust_Lname = $content['last_name'];
$Cust_Email = $content['email'];
$Street_Address = $content['address'];
$City = $content['city'];
$State = $content['state'];
$Country = $content['country'];
$Postal_Code = $content['zip_code'];
//also fetch the appended "array" of key/value fields...
$Response_AgeKey = $content['reponse_data'][0]['key'];
$Response_GenderKey = $content['reponse_data'][1]['key'];
$Response_IncomeKey = $content['reponse_data'][2]['key'];
$Response_CityKey = $content['reponse_data'][3]['key'];
$Response_StateKey = $content['reponse_data'][4]['key'];
$Response_CountryKey = $content['reponse_data'][5]['key'];
$Response_Age = $content['reponse_data'][0]['value'];
$Response_Gender = $content['reponse_data'][1]['value'];
$Response_Income = $content['reponse_data'][2]['value'];
$Response_City = $content['reponse_data'][3]['value'];
$Response_State = $content['reponse_data'][4]['value'];
$Response_Country = $content['reponse_data'][5]['value']
`
Как кто-то сказал, «response_data» не является допустимым JSON. Есть пара дополнительных двойных кавычек, заключающих массив. Но я думаю, что если это ответ, а не json, набранный вручную, то лучше автоматически нормализовать полученную строку, прежде чем декодировать ее с помощью Json_decode, главным образом, удаляя вмещающий двойник. Вы можете используйте код ниже для достижения этого:
<?php
// Identify the content as json
header("Content-Type: application/json; charset=UTF-8");
// get the contents of the JSON file
$data = file_get_contents("php://input");
//normalize the json in order to be properly decoded
$start=strpos($data,':',strpos($data,'response_data'));
$get=substr($data,$start+1,strrpos($data,'"')-$start);
$data=str_replace($get,trim(trim($get),'"'),$data);
//decode JSON data to PHP array
$content = json_decode($data, true);
//Fetch the details of customer
$Cust_Fname = $content['first_name'];
$Cust_Lname = $content['last_name'];
$Cust_Email = $content['email'];
$Street_Address = $content['address'];
$City = $content['city'];
$State = $content['state'];
$Country = $content['country'];
$Postal_Code = $content['zip_code'];
//also fetch the appended "array" of key/value fields...
$Response_AgeKey = $content['reponse_data'][0]['key'];
$Response_GenderKey = $content['reponse_data'][1]['key'];
$Response_IncomeKey = $content['reponse_data'][2]['key'];
$Response_CityKey = $content['reponse_data'][3]['key'];
$Response_StateKey = $content['reponse_data'][4]['key'];
$Response_CountryKey = $content['reponse_data'][5]['key'];
$Response_Age = $content['reponse_data'][0]['value'];
$Response_Gender = $content['reponse_data'][1]['value'];
$Response_Income = $content['reponse_data'][2]['value'];
$Response_City = $content['reponse_data'][3]['value'];
$Response_State = $content['reponse_data'][4]['value'];
$Response_Country = $content['reponse_data'][5]['value']
?>
"response_data"
не является допустимым JSON. Есть пара дополнительных двойных кавычек, окружающих массив. Удалите вмещающие двойные кавычки, тогда это должно работать.
{
"address": "4 Ficticious Ave",
"city": "Miami",
"country": "United States",
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Doe",
"state": "FL",
"zip_code": "03423",
"response_data": [
{
"key": "7122",
"value": "37-52"},
{
"key": "7123",
"value": "Female"},
{
"key": "7124",
"value": "$35,000 to $50,000 USD"},
{
"key": "6176",
"value": "Miami"},
{
"key": "6177",
"value": "FL"},
{
"key": "6179",
"value": "United States"}
]
}