求解答一个并列的json数据应该怎么处理 已经思考了2天了还是没结果

来源:1-1 JSON简介

kim4

2016-01-09 11:34

其实有两个问题

先说第一个问题

我是通过PDO 的fetchAll(PDO::FETCH_ASSOC)属性方法获取一个关联数组

格式是一个二维数组

通过print_r打印后获得

Array ( [0] => Array ( [id] => 1 [name] => kim1 [password] => 我是中文字符 [date] => 2016-01-01 00:00:00 ) [1] => Array ( [id] => 2 [name] => kim2 [password] => 我是中文字符1  [date] => 2016-01-01 00:00:00 ) [2] => Array ( [id] => 3 [name] => kim3 [password] => 我是中文字符1 [date] => 2016-01-01 00:00:00 )

问题是我使用json_encode()方法转换后转换后得到的是 这样一个并列数组的json格式

[{"id":"1","name":"kim1","password":"\u6211\u662f\u4e2d\u6587\u5b57\u7b26","date":"2016-01-01 00:00:00"},{"id":"2","name":"kim2","password":"\u6211\u662f\u4e2d\u6587\u5b57\u7b26","date":"2016-01-01 00:00:00"},{"id":"3","name":"kim3","password":"\u6211\u662f\u4e2d\u6587\u5b57\u7b26","date":"2016-01-01 00:00:00"}]

然而老师的php是通过设置的二维数组

$members['1']['username'] = "幕课网";
$members['1']['password'] = "mukewang";
$members['2']['username'] = "袁明贺";
$members['2']['password'] = "haha";
$members['2']['address'] = "北京市朝阳区";
$members['3']['members']['username']="我是第三个用户名";

我使用同样的方法 通过print_r打印后获得的是也是和我一样的数组格式

Array ( [1] => Array ( [username] => 幕课网 [password] => mukewang ) [2] => Array ( [username] => 袁明贺 [password] => haha [address] => 北京市朝阳区 [members] => Array ( [username] => 我是第三个用户名 ) ) )

那么问题来了 同样我通过我使用json_encode()方法转换后 的结果和得出的结果截然不同

是什么问题  老师的得出的结果是:

 {"1":{"username":"\u5e55\u8bfe\u7f51","password":"mukewang"},"2":{"username":"\u8881\u660e\u8d3a","password":"haha","address":"\u5317\u4eac\u5e02\u671d\u9633\u533a","members":{"username":"\u6211\u662f\u7b2c\u4e09\u4e2a\u7528\u6237\u540d"}}}

我想问的第一个问题是 为什么会这样 一样的数组格式 转换JSON后得的结果为什么截然不同

下面是第二问问题

当得到老师的这种json格式

我可以通过"$().data[1].name: 获取值 "幕课网" 

那么这种[{},{}]并列数组的格式 要怎么才能获取里面的name对应的"kim1"的值

写回答 关注

2回答

  • woosir
    2016-02-20 21:07:37
    已采纳

    第一个问题是不是想问json_encode后,你的最外面是[ ]数组形式 ,老师的是{ }键值对形式?

    php数组是不管键名的,但要想json是数组的话,那么php数组键名必须是从数字0开始且连续的,你的是从0开始,而老师的$members是从1开始的,所以json后和你的不一样。改成下面写法就可以获得和你一样的结果了。

    $members[0]['username'] = "幕课网";
    $members[0]['password'] = "mukewang";
    $members[1]['username'] = "袁明贺";
    $members[1]['password'] = "haha";
    $members[1]['address'] = "北京市朝阳区";
    $members[2]['members']['username']="我是第三个用户名";

    print_r和json_encode后结果:

    Array
    (
        [0] => Array
            (
                [username] => 幕课网
                [password] => mukewang
            )
    
        [1] => Array
            (
                [username] => 袁明贺
                [password] => haha
                [address] => 北京市朝阳区
            )
    
        [2] => Array
            (
                [members] => Array
                    (
                        [username] => 我是第三个用户名
                    )
    
            )
    
    )
    [{"username":"\u5e55\u8bfe\u7f51","password":"mukewang"},{"username":"\u8881\u660e\u8d3a","password":"haha","address":"\u5317\u4eac\u5e02\u671d\u9633\u533a"},{"members":{"username":"\u6211\u662f\u7b2c\u4e09\u4e2a\u7528\u6237\u540d"}}]


  • kim4
    2016-01-09 11:51:04

    这里解释一下刚刚想到怎么处理这个并列的json格式也就第二问题

    就通过用处理数组的思维来处理这种格式json数据

    获取第每一个下标即可:  dara[0]['name']  这样就可以获取name对应的值了 

    这个小问题解答 老师开始讲要说明的 但是始终都没说怎么处理这样的数据  然后遇到同样问题的同学们

    不过第一个转换后得到结果不一样的问题 还是不知道什么回事 等待答复吧 

JSON应用场景与实战

你还不知道JSON吗,快快加入我们吧,通过学习加深对Json的理解

74894 学习 · 204 问题

查看课程

相似问题