Presented @ potatotips#80
.app jq
View Slide
id:cockscomb
jq
jqstedolan.github.io/jq/$ echo '{"foo": "bar"}' | jq '.foo'"bar"
ghScripting with GitHub CLI | The GitHub Blog$ gh api... --jq '.[].login'#= >"user1"#= >"user2"#= > ...
jq JSON
.app
URL
Swift jq
gojqitchyny/gojq: Pure Go implementation of jq
golang.org/x/mobile
package bindingimport ("github.com/itchyny/gojq"_ "golang.org/x/mobile/bind")type Query struct {query *gojq.Query}func NewQuery(src string) (*Query, error) {query, err:=gojq.Parse(src)if err!=nil {return nil, err}return &Query{query: query}, nil}func (q *Query) Run(input []byte) (*Iterator, error) {...}
$ gomobile bind \-target=ios,iossimulator,macos,maccatalyst \-iosversion 14 \-prefix GOJQ \-o Frameworks/GOJQBinding.xcframework \github.com/cockscomb/swift-gojq/binding
import Foundationopen class GOJQBindingIterator : NSObject, goSeqRefInterface {public init()open func next() throws -> Data}open class GOJQBindingQuery : NSObject, goSeqRefInterface {public init?(_ src: String?)open func run(_ input: Data?) throws -> GOJQBindingIterator}public func GOJQBindingNewQuery(_ src: String?, _ error: NSErrorPointer) -> GOJQBindingQuery?
import GOJQBindingenum QueryError: Error {case unknown}public struct Query {private let binding: GOJQBindingQuerypublic init(_ query: String) throws {var error: NSError?guard let binding = GOJQBindingNewQuery(query, &error) else {throw error ?? QueryError.unknown}self.binding = binding}public func run(_ input: Data) throws -> AsyncThrowingStream {...}}
// swift-tools-version: 5.7import PackageDescriptionlet package = Package(name: "SwiftGoJq",platforms: [ .macOS(.v13), .macCatalyst(.v14), .iOS(.v14) ],products: [.library(name: “SwiftGoJq”, targets: ["SwiftGoJq"]),],dependencies: [],targets: [.binaryTarget(name: "GOJQBinding",url: "https://github.com/cockscomb/swift-gojq/releases/download/0.1.0/GOJQBinding.xcframework.zip",checksum: "1c45710de17fb7020dcfc75105344729725c5e3875e7058e98790e5f4e178162"),.target(name: "SwiftGoJq",dependencies: ["GOJQBinding",]),])
cockscomb/swift-gojq
import AppIntentsimport AsyncAlgorithmsimport SwiftGoJqstruct JQIntent: AppIntent {static var title: LocalizedStringResource = "jq"@Parameter(title: "JSON") var input: String@Parameter(title: "Query") var query: Stringstatic var parameterSummary: some ParameterSummary {Summary("\(\.$input) | jq '\(\.$query)'")}func perform() async throws -> some IntentResult {let jq = try Query(query)let results = try jq.run(input)let array = try await Array(results)return .result(value: array)}}
WEB+DB PRESS vol.132iOS1612/243id:cockscombid:yutailang01 19id:kouki_dan