Я не могу разобрать мой локальный файл JSON, который я создал для простой идеи приложения в SwiftUI, и я новичок в разработке приложений. Я попробовал несколько методов, но это не сработало. Попытка выяснить все, что мне не хватает при разборе и сделать это в ListView. Что я хочу сделать, это проанализировать язык и предложение, и в этом случае предложение в моих 3 объектах содержит различное количество предложений, которые я хочу проанализировать, например, предложение1, предложение1b и т. Д. c. (Изменить: показаны две разные ошибки кода и фрагмент Json)
- JSON Фрагмент файла
[
{
"name": "English",
"id": 1,
"sentence": {
"sentence1": "I eat the apple",
"sentence2": "It is John's apple",
"sentence3": "I give John the apple",
"sentence4": "We give him the apple",
"sentence5": "He gives it to John",
"sentence6": "She gives it to him",
"sentence7": "Is the apple red?",
"sentence8": "The apples are red",
"sentence9": "I must give it to him",
"sentence10": "I want to give it to her",
"sentence11": "I'm going to know tomorrow",
"sentence12": "I can't eat the apple"
}
},
{
"name": "Mandarin",
"id": 2,
"sentence": {
"sentence1": "我吃的苹果",
"sentence1a": "我吃的蘋果",
"sentence1b": "Wǒ chī de píngguǒ",
"sentence2": "之是约翰的苹果",
"sentence2a": "之是約翰的蘋果",
"sentence2b": "Zhī shì Yuēhàn de píngguǒ",
"sentence3": "我给约翰的苹果",
"sentence3a": "我給約翰的蘋果",
"sentence3b": "Wǒ gěi Yuēhàn de píngguǒ",
"sentence4": "我们给约翰的苹果",
"sentence4a": "我們給約翰的蘋果",
"sentence4b": "Wǒ men gěi Yuēhàn de píngguǒ",
"sentence5": "他把它交给约翰",
"sentence5a": "他把它交給約翰",
"sentence5b": "Tā bǎ tā jiāo gěi Yuēhàn",
"sentence6": "她给了它",
"sentence6a": "她給了它",
"sentence6b": "Tā gěi le tā",
"sentence7": "苹果是红色的吗?",
"sentence7a": "蘋果是紅色的嗎?",
"sentence7b": "Píngguǒ shì hóngsè de ma?",
"sentence8": "苹果是红色的",
"sentence8a": "苹果是红色的",
"sentence8b": "Píngguǒ shì hóngsè de",
"sentence9": "我必须给他",
"sentence9a": "我必須給他",
"sentence9b": "Wǒ bìxū gěi tā",
"sentence10": "我想给他",
"sentence10a": "我想給他",
"sentence10b": "Wǒ xiǎng gěi tā",
"sentence11": "我明天要知道",
"sentence11a": "我明天要知道",
"sentence11b": "Wǒ míngtiān yào zhīdào",
"sentence12": "我不吃的苹果",
"sentence12a": "我不吃的蘋果",
"sentence12b": "Wǒ bù chī de píngguǒ"
}
},
{
"name": "French",
"id": 3,
"sentence": {
"sentence1": "Je mange la pomme",
"sentence2": "C’est la pomme de John",
"sentence3": "Je donne la pomme à John",
"sentence4": "On lui donne la pomme",
"sentence5": "Il la donne à John",
"sentence6": "Elle la lui donne",
"sentence7": "Est-ce que la pomme est rouge? or Elle est rouge, la pomme?",
"sentence8": "Les pommes est rouges",
"sentence9": "Je dois la lui donner",
"sentence10": "Je veux la lui donner",
"sentence11": "Je le saurai demain",
"sentence12": "Je ne peux pas manger la pomme"
}
}
]
Ошибка попытки 1 - Использование UIKit
struct AppData: Codable {
var name: String
var id: Int
var sentence: String
}
public class DataLoader {
@Published var appData = [AppData]()
init() {
load()
sort()
}
func load() {
if let fileLocation = Bundle.main.url(forResource: "twelveData", withExtension: "json") {
// do catch in case of error
do {
let data = try Data(contentsOf: fileLocation)
let jsonDecoder = JSONDecoder()
let dataFromJson = try JSONDecoder.decode([AppData].self, from: data)
self.appData = dataFromJson
} catch {
print(error)
}
}
}
func sort(){
self.appData = self.appData.sorted(by: {$0.id < $1.id})
}
}
Ошибка попытки 2
import SwiftUI
import Foundation
import Combine
struct TwelveData: Codable, Identifiable {
public var id: Int
public var name: String
public var sentence: String
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "language"
case sentence = "sentence"
}
}
class TwelveSentences: ObservableObject {
@Published var twelveData = [TwelveData]()
init() {
guard let path = Bundle.main.url(forResource: "twelveData", withExtension: "json") else { return }
do {
let data = try Data(contentsOf: path)
DispatchQueue.main.async {
self.twelveData = try JSONDecoder().decode([TwelveData].self, from: data)
}
} catch {
print("error:\(error)")
}
}
}
struct ContentView: View {
@ObservedObject var fetch = TwelveData()
var body: some View {
NavigationView {
List(fetch.TwelveData) { TwelveData in
VStack {
Text(TwelveData.name)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
}