iOS 说不能解析这样的 JSON?

2019-01-11 10:38:45 +08:00
 salamanderMH

题目描述

返回的 json 格式如下

{
    "status": 1,
    "content": "get seats info successfully !",
    "data": {
        "seats": {
            "1": {
                "nickname": "salamander",
                "avatar": "*******************",
                "uid": 5464
            },
            "3": {
                "nickname": "coopk、",
                "avatar": "***********************",
                "uid": 54645645
            }
        }
    }
}

他说,seats中的数据不能以 1,3 这样的数字,无法解析,请教一下大家

5990 次点击
所在节点    问与答
74 条回复
0x000007
2019-01-11 11:35:31 +08:00
11 楼那种很好,你这种没法直接转 Model,还要多操作一步
0x000007
2019-01-11 11:37:14 +08:00
好奇这种 json 格式安卓那边没问题?好像安卓那边更恶心这种格式
cc85060
2019-01-11 11:50:38 +08:00
@0x000007 感觉楼主是个新手,我这边后端接口要是出这样的数据可能会被我怼死。。。
joyhub2140
2019-01-11 11:53:13 +08:00
解析没问题,不过设计有问题,seats 应该是一个数组,那些 key 如 1,3,应该作为 position 弄到 bean 属性里。
maplejaw
2019-01-11 12:02:14 +08:00
这种格式你必须保证 key 只有 1,3。否则建议 11 楼的格式。
holonunu
2019-01-11 12:13:55 +08:00
@salamanderMH 可以解析,model 中 key 不能是数字。

但是!!!

可以把 model 中的 key 定为 key1、key2、key3,解析的时候映射一下:

1 -> key1
2 -> key2
3 -> key3

我猜你这个同事要么是嫌麻烦要么就是没了解第三方的 json-model 框架。
Vegetable
2019-01-11 12:20:07 +08:00

不推荐
dremy
2019-01-11 12:48:42 +08:00
如果 id 是订单号这种超长的数字串,做成 key 也不能解析???
objective-c 和 swift 这么弱的嘛
dremy
2019-01-11 12:56:33 +08:00
@cnbobolee
动态语言先了解一下
静态语言的话,Java 有 Map,Go 有 interface{} 怎么不能解析?
xqc6321
2019-01-11 13:03:13 +08:00
这不是嫌麻烦的问题。
这是操蛋的问题。
严重同意 23 楼
salamanderMH
2019-01-11 13:06:30 +08:00
结贴吧
zr8657
2019-01-11 13:15:34 +08:00
11 楼正解,同意 23 楼
zqx
2019-01-11 13:17:43 +08:00
ios 不了解,但是大多数语言变量名是不能数字开头的
Deville
2019-01-11 13:21:33 +08:00
这根本不是数据格式能不能解的问题。。。。。。。而是看着闹心。。。
wly19960911
2019-01-11 13:25:38 +08:00
理解下,不是 iOS 说格式错误,而是格式解析出来不好用。
cloverstd
2019-01-11 13:30:21 +08:00
可以解析,你确定你是 "1" 不是 1 ?
janus77
2019-01-11 13:31:00 +08:00
目测 php 写的,安卓表示这种返回大概率会被怼
allenhu
2019-01-11 13:31:35 +08:00
某些 json 库确实没法处理这种格式的 JSON,因为它没法 seats.1 这样取出结果,只能 seats.user1 ;所以还是建议换成数组吧,不管是语义上还是格式上,都更加清晰。
OctWu
2019-01-11 13:35:35 +08:00
能解析啊。

struct Fuck: Codable {
var seats: [String: User]
}

见过这种,有的公司用组合接口,为了图方便,这个 seats.key 可能下面还有别的用。虽然说客户端写起来是挺烦躁的
cnbobolee
2019-01-11 13:44:22 +08:00
@dremy 看清我的答案再说,说的是要 model 做解析。哎!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/525932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX