簡體   English   中英

PHP展平對象的JSON數組?

[英]PHP flattening JSON array of objects?

我正在使用AFNetworking從iOS應用中發布一些JSON。 這似乎工作正常,我發送的JSON具有以下格式:

{
    "user":{
        "firstName":"Joe",
        "lastName":"Blogs",
        "contact":{
            "email":"joe@blogs.com",
            "phone":"0800900800"
        },
        "list":[
            {
                "name":"Item1",
                "code":"ITM1",
                "category":0
            },
            {
                "name":"Item2",
                "code":"ITM2",
                "category":3
            },
            {
                "name":"Item3",
                "code":"ITM3",
                "category":2
            }
        ]
    }
}

然后,我將此JSON的內容解析到MySQL表中。 我能夠按照您期望的那樣從PHP的JSON中讀取所有信息(名字,姓氏,聯系方式等):

<?php
    $json = $_POST["user"];

    $fname = $json["firstName"];
    $lname = $json["lastName"];

    $contact = $json["contact"];
    $email = $contact["email"];
    .
    .
    .
?>

但是,當我遍歷“列表”數組時,該數組似乎變平了。 如果我進行計數:

$list = $json["list"];
$listCount = count($list);

$listCount將等於9(即數組中的3個對象x每個對象上的3個屬性,就好像數組已經展平了),而不是我期望的3個。

我是否誤解了如何在PHP中解析JSON數組,或者AFNetworking可以在發布之前以某種方式處理JSON?

更新:

var_dumped JSON的“列表”數組部分后,我得到了以下信息:

["list"]=>
array(9) {
[0]=>
array(1) {
  ["name"]=>
  string(5) "Item1"
}
[1]=>
array(1) {
  ["code"]=>
  string(4) "ITM1"
}
[2]=>
array(1) {
  ["category"]=>
  string(1) "0"
}
[3]=>
array(1) {
  ["name"]=>
  string(5) "Item2"
}
[4]=>
array(1) {
  ["code"]=>
  string(4) "ITM2"
}
[5]=>
array(1) {
  ["category"]=>
  string(1) "3"
}
[6]=>
array(1) {
  ["name"]=>
  string(5) "Item3"
}
[7]=>
array(1) {
  ["code"]=>
  string(4) "ITM3"
}
[8]=>
array(1) {
  ["category"]=>
  string(1) "2"
}
}

因此,似乎原始數組中的每個對象都被拆分為該數組中自己的對象。

供參考,這是我在iOS應用中使用AFNetworking的請求:

User *user = [users objectAtIndex:0];
NSDictionary *userDictionary = [user serialiseUser];
NSLog(@"User\n%@", userDictionary);

NSURL *url = [NSURL URLWithString:baseURL];
AFHTTPRequestOperationManager *operationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];

if (operationManager) {
    [operationManager POST:path
                parameters:userDictionary
                   success:^(AFHTTPRequestOperation *operation, id responseObject) {
                       NSLog(@"Success: %@", responseObject);
                   }
                   failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                       NSLog(@"Failed: %@", error);
                       NSLog(@"%@", operation.responseString);
                   }];

其中serialiseUser產生上面的原始JSON / Dictionary對象。

預先感謝您的任何見解。

嘗試如下解碼json

<?php
 $json = json_decode($_POST["user"]);
 print_r($json);
?>

stdClass Object
(
    [user] => stdClass Object
        (
            [firstName] => Joe
            [lastName] => Blogs
            [contact] => stdClass Object
                (
                    [email] => joe@blogs.com
                    [phone] => 0800900800
                )

        [list] => Array
            (
                [0] => stdClass Object
                    (
                        [name] => Item1
                        [code] => ITM1
                        [category] => 0
                    )

                [1] => stdClass Object
                    (
                        [name] => Item2
                        [code] => ITM2
                        [category] => 3
                    )

                [2] => stdClass Object
                    (
                        [name] => Item3
                        [code] => ITM3
                        [category] => 2
                    )

            )



       )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM