首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Swift中动态构建JSON

在Swift中动态构建JSON
EN

Stack Overflow用户
提问于 2016-01-21 16:09:05
回答 2查看 1.2K关注 0票数 0

我正在尝试在Swift中构建一些JSON。我见过一些将Dictionary转换为JSON或将类转换为JSON的示例,但我希望能够动态地将数据转换为JSON。我还想存储多个对象,而不是只存储一个(我发现的大多数示例似乎都是这样做的)。

下面是我的代码,它创建了我想要存储的对象的字典:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for topic in topics{

                var relEntries = getRelevantEntries(topic.id)
                var entryItem:[String:Any] = ["":""]
                for entry in relEntries{
                    var eId = ["id":entry.id]
                    var eTitle = ["title":entry.title]
                    entryItem = [
                        "id":entry.id,
                        "title":entry.title
                    ]
                }
                var topicItem:[String:Any] = [
                    "id":topic.id,
                    "topicName":topic.name,
                    "entries":entryItem
                ]
            }

我想创建一个JSON Array,其中每个对象都包含一个int、string和另一个JSON Array。我写了一个演示表来澄清。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
 {   id: "id",
     topicName: "topicName",
     entries:[
          { id: "id", title: "title" },
          { id: "id2", title: "title2"}
          ]},
  {  id: "id2",
     topicName: "topicName2",
     entries:[
          { id: "id", title: "title" },
          { id: "id2", title: "title2"}
          ]}
 ]

那么,我该从哪里开始将所有主题合并到一个JSON数组中呢?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-01-21 16:16:35

您可以在自定义对象上使用序列化技术来生成表示它们的基础类型。

之后,您可以使用NSJSONSerialization类来生成json。

由于您必须区分不同的类,因此除了handling with mirrors之外,在这个时间点上,除了afaik之外,可以为您概括工作的类很少。

票数 0
EN

Stack Overflow用户

发布于 2016-01-21 16:57:12

你可以说:

我想创建一个JSON数组,其中每个对象都包含一个整数、字符串和另一个JSON数组。我写了一个演示表来澄清。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
 {   id: "id",
     topicName: "topicName",
     entries:[
          { id: "id", title: "title" },
          { id: "id2", title: "title2"}
          ]},
  {  id: "id2",
     topicName: "topicName2",
     entries:[
          { id: "id", title: "title" },
          { id: "id2", title: "title2"}
          ]}
 ]

好吧,那是什么?它是一个字典({...})的数组([...]),其中每个字典都有一个id键(具有一个字符串值)、一个topicName键(具有一个字符串值)和一个entries键,其中每个entries值是一个包含两个字典的数组,两个字典分别具有一个id键和一个title键(每个都具有一个字符串值)。

所以您的工作只是构造该结构并将其序列化为JSON。这是微不足道的。在这里,作为样机,我将使用文字进行演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var d1 : [NSObject:AnyObject] = ["id":"id", "topicName":"topicName"]
var d2 : [NSObject:AnyObject] = ["id":"id2", "topicName":"topicName2"]
let dd1 = ["id":"id", "title":"title"]
let dd2 = ["id":"id2", "title":"title2"]
let arr1 = [dd1,dd2]
let arr2 = [dd1,dd2]
d1["entries"] = arr1
d2["entries"] = arr2
let arr = [d1,d2]
let d = try! NSJSONSerialization.dataWithJSONObject(arr, options: [])
let s = NSString(data: d, encoding: NSUTF8StringEncoding)
print(s!)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
 {"id":"id",
  "entries":[
    {"id":"id","title":"title"},   
    {"id":"id2","title":"title2"}
  ],
  "topicName":"topicName"
  },
  {"id":"id2",
  "entries":[
    {"id":"id","title":"title"},
    {"id":"id2","title":"title2"}
  ],
  "topicName":"topicName2"
  }
 ]

我相信你会发现这正是你所要求的。现在,您所要做的就是编写代码,将原始数据结构转换为我上面用文字构造的数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34928660

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文