我能够访问我的$ _POST数组值,但似乎无法获得正确的语法,只返回"数据"数组的一部分。如果我运行var_dump($_POST["attributes"]);
,我会在响应回调中收到以下内容(这正是我的预期):
string '{
"device_maker" = unknown;
"device_model" = Simulator;
"first_visit" = "1387478168.109";
"last_visit" = "1388358490.638";
latitude = "37.78583526611328";
locale = en;
longitude = "-122.4064178466797";
"opted_in" = 1;
"opted_out" = 0;
"os_platform" = "iPhone OS";
"os_version" = "7.0.3";
"this_visit" = "1387478168.109";
"user_id" = 1;
}' (length=389)
如果我尝试单独访问任何一个属性,例如var_dump($_POST["attributes"]["device_model"]);
,我得到的全部是string '{' (length=1)
。我显然错过了解析这些数据的关键想法。我如何解析"属性"所以我可以将每个列出的值放入一个插入语句中(一旦我获得数据,我已经准备好了这部分)?当然,我的PHP非常生疏。所以我可能会忽视一些明显的东西。
看到我需要的数据而不知道如何正确访问它是令人沮丧的。所以,任何帮助表示赞赏。请询问您是否需要澄清。
答案 0 :(得分:1)
显然,在POST中检索的字符串不是有效的JSON。如果无法替换发送到服务器的值,则可以始终执行(脏)变通方法:
首先,替换一些字符使其成为有效的json:
$jsonStr = str_replace('=', ':', $_POST["attributes"]);
$jsonStr = str_replace(';', ',', $jsonStr);
$jsonStr = str_replace(',}', '}', $jsonStr);
然后我们可以尝试使用json_decode函数解析它:
$jsonArray = json_decode($jsonStr);
现在您可以将其作为常规关联数组进行访问,例如:
echo $jsonArray['device_model'];
答案 1 :(得分:-2)
您在此处显示的内容看起来像JSON编码数据 - 它是单个字符串,因此没有$ _POST [“attributes”] [“device_model”]。
您可以通过从JSON转换来访问属性变量中嵌入的数据:
$a_string='{
"device_maker" = unknown;
"device_model" = Simulator;
"first_visit" = "1387478168.109";
"last_visit" = "1388358490.638";
latitude = "37.78583526611328";
locale = en;
longitude = "-122.4064178466797";
"opted_in" = 1;
"opted_out" = 0;
"os_platform" = "iPhone OS";
"os_version" = "7.0.3";
"this_visit" = "1387478168.109";
"user_id" = 1;
}';
// or $astring=$_POST['attributes']
$data=json_decode($a_string);
print $data['device_model'];
....但你需要验证数据的来源 - 如果它不是JSON,那么这会在某些时候中断。