首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON Parse失败了,因为它是由Swift转换而来的

JSON Parse失败了,因为它是由Swift转换而来的
EN

Stack Overflow用户
提问于 2017-03-28 07:27:52
回答 1查看 341关注 0票数 0

我很好奇为什么我的json格式不正确。我试图添加一个数组字典,并计算出,我的json格式不正确,ACTIVE_CHATS和INACTIVE_CHATS应该是由.append(value)在swift3上创建的数组列表。但是,当我试着用我的反应紧张的JSON.parse,我得到了明确的json位置。我与android团队联系,发现数组应该是[]而不是()。如何快速获得正确的json格式?

这是我当前的json格式,这是错误的。

代码语言:javascript
复制
{
    "ACTIVE_CHATS" =     (
    );
    "INACTIVE_CHATS" =     (
                {
            "app_token" = "someapptoken";
            "channel_name" = "Channel-1";
            icon = "https://media.icon.com/icons/appicon-1.jpg";
            "last_message" = "some message";
            "time_since_last_message" = "2017-03-28 06:13:33 +0000";
            "unread_messages" = 3;
        }
    );
    "ALL_CHAT" =     {
        "app_token" = "someapptoken";
        "channel_name" = "Channel-2";
        icon = "https://media.icon.com/icons/appicon-2.jpg";
        "last_message" = "Some message";
        "time_since_last_message" = "2017-03-28 06:13:33 +0000";
        "unread_messages" = 3;
    };
}

在快速创建json时我的代码

代码语言:javascript
复制
        var activearray = Array<Any>()
        var inactivearray = Array<Any>()
        var testdict = [String: Any]()
        var counter = 0
        for data in array {
            var listMessage : [Any?] = (Smooch.conversation()?.messages)!
            let unreadMsgCount = Smooch.conversation()?.unreadCount
            if listMessage.count == 0{
                continue
            }
            var iconUrl = ""
            var channelName = ""
            for msg in listMessage {
                let msgSkt = msg as! SKTMessage
                if (!msgSkt.isFromCurrentUser) {
                    iconUrl = (msg as! SKTMessage).avatarUrl!
                    channelName = (msg as! SKTMessage).name!
                    break
                }
            }
            let lastMsg : SKTMessage = listMessage[listMessage.count - 1] as! SKTMessage
            let lastMsgText : String = lastMsg.text!
            let epTime : Date = lastMsg.date!
            var dict = [String: Any]()
            dict = ["unread_messages":unreadMsgCount! as UInt,"icon":iconUrl,"channel_name":channelName,"last_message":lastMsgText,"time_since_last_message":epTime,"app_token":array[counter]]
            if counter == 0 {//put all
                testdict["ALL_CHAT"] = dict
            }else if counter > 0 && unreadMsgCount! > 0{// add active
                activearray.append(dict)
            }else{//add unactive
                inactivearray.append(dict)
            }
            counter += 1
        }

        testdict["ACTIVE_CHATS"] = activearray
        testdict["INACTIVE_CHATS"] = inactivearray
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-28 08:45:17

根据我们在注释中的讨论,您面临的问题是,您输出一个NSDictionary作为它的字符串表示形式(如果您愿意),而不是实际输出有效的JSON :)

您需要做的是将要转换为JSON格式的最终NSDictionary传递给JSONSerializationdata(withJSONObject:options:)方法。

在Swift中,代码如下所示:

代码语言:javascript
复制
do {
    let data = try JSONSerialization.data(withJSONObject:testdict, options: JSONSerialization.WritingOptions.prettyPrinted)
    let str = String(data:data, encoding: String.Encoding.utf8)
    print(str)
} catch {
    print("JSON error")
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43063187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档