将 JSValue 转换为类型化数组

Posted

技术标签:

【中文标题】将 JSValue 转换为类型化数组【英文标题】:Converting a JSValue to a typed array 【发布时间】:2020-01-10 19:50:07 【问题描述】:

我正在编写一个 tvos 应用程序,它有一个函数,我的 tvml 调用一个对象数组。

如何正确地将 json 转换为某种类型/接口的数组?

// This type is generated from my TypeScript types
struct Video: Codable 
    let title: String

    enum CodingKeys: String, CodingKey 
        case title
    



      func appController(_ appController: TVApplicationController, evaluateAppjavascriptIn jsContext: JSContext) 
        let playVideo : @convention(block) (Int, JSValue) -> Void = 
            (start, json) -> Void in
            // How do I properly cast the json to an array of Videos?
            let playlist = json;

            for video in playlist 
                // here I would like to access video.title
                print(video)
            
        

        jsContext.setObject(unsafeBitCast(playVideo, to: AnyObject.self),
                            forKeyedSubscript: "playVideo" as (NSCopying & NSObjectProtocol))
    

PS:我是一个 swift/objc 新手。

【问题讨论】:

这能回答你的问题吗? How to parse Array of JSON to array in Swift 这似乎是从一个有点不同的文件准备好的。必须是这种 JSValue 类型(我认为)转换为 swift 类型。 【参考方案1】:

我想我明白了。看来我只需要使用AnyHashable

let playlist = json.toArray() as! [[AnyHashable:Any]];

for video in playlist 
  print(video[AnyHashable("title")])

虽然这仍然没有使用我定义的类型

【讨论】:

以上是关于将 JSValue 转换为类型化数组的主要内容,如果未能解决你的问题,请参考以下文章

将对象数组转换为其原始类型的数组

c#下可否将一个枚举类型的数组转换为一个整型数组

将 ArrayList 转换为特定类型的数组 [重复]

将不同值类型的数组转换为字节数组

将数组转换为对象类型

java怎样将集合类型转换为数组类型