0

NS配列で次のようなJSONデータを取得しています:

これは有効な JSON ではないようです

jsonArray:
{
    d = "[{\"Training_Code\":\"1234      \",\"Training_Duration\":\"2hrs      \",\"Training_Startdate\":\"14/02/2013 15:00:00\",\"Training_Enddate\":\"14/02/2013 17:00:00\",\"Trainer_ID\":1,\"Training_Location\":\"B-Wing Training room-4\",\"Comments\":\"C# training\",\"Keyword\":\"C#1234\",\"NumberofDays\":1},{\"Training_Code\":\"4321      \",\"Training_Duration\":\"16        \",\"Training_Startdate\":\"17/02/2013 10:30:00\",\"Training_Enddate\":\"17/02/2013 17:30:00\",\"Trainer_ID\":2,\"Training_Location\":\"A-Wing Training Room-6\",\"Comments\":\"Objective-C\",\"Keyword\":\"Obj-C4321\",\"NumberofDays\":2}]";
}

これを次のように有効なjsonに変更したい:

[
{
    "Training_Code": "1234",
    "Training_Duration": "2hrs",
    "Training_Startdate": "14/02/201315: 00: 00",
    "Training_Enddate": "14/02/201317: 00: 00",
    "Trainer_ID": 1,
    "Training_Location": "B-WingTrainingroom-4",
    "Comments": "C#training",
    "Keyword": "C#1234",
    "NumberofDays": 1
},
{
    "Training_Code": "4321",
    "Training_Duration": "16",
    "Training_Startdate": "17/02/201310: 30: 00",
    "Training_Enddate": "17/02/201317: 30: 00",
    "Trainer_ID": 2,
    "Training_Location": "A-WingTrainingRoom-6",
    "Comments": "Objective-C",
    "Keyword": "Obj-C4321",
    "NumberofDays": 2
}

]

注: この "d" がどこから来ているのかはわかりません...Plaese はこれを念頭に置いておくことをお勧めします。

有効な json に変更して、これを Sqlite DB に挿入するにはどうすればよいですか? ありがとう。

4

3 に答える 3

2

いつでもプレーンテキストとして挿入できます。JSON 文字列を操作する場合は、これをお勧めします。その文字列を JKArray (配列と同じ) に変換できます。その後、配列を反復処理し、DB 処理を実行します (テーブルに挿入します...)

何か不足していますか?あなたがやりたいことについてもっと情報が必要かもしれません...

于 2013-02-20T08:42:31.117 に答える
0

json を使用して解析し、NSJSONSerializationキーを列にマッピングしてデータベースに挿入します。

    NSString *str = [[NSString alloc] initWithString:@"[{\"Training_Code\":\"1234      \",\"Training_Duration\":\"2hrs      \",\"Training_Startdate\":\"14/02/2013 15:00:00\",\"Training_Enddate\":\"14/02/2013 17:00:00\",\"Trainer_ID\":1,\"Training_Location\":\"B-Wing Training room-4\",\"Comments\":\"C# training\",\"Keyword\":\"C#1234\",\"NumberofDays\":1},{\"Training_Code\":\"4321      \",\"Training_Duration\":\"16        \",\"Training_Startdate\":\"17/02/2013 10:30:00\",\"Training_Enddate\":\"17/02/2013 17:30:00\",\"Trainer_ID\":2,\"Training_Location\":\"A-Wing Training Room-6\",\"Comments\":\"Objective-C\",\"Keyword\":\"Obj-C4321\",\"NumberofDays\":2}]"];

    NSError *jsonError = nil;
    id allValues = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding]
                                                   options:0
                                                     error:&jsonError];

    if(jsonError!=nil)
        InfoLog(@"error: %@",jsonError);

    NSArray *result = (NSArray*)allValues;

    for(int i=0;i<[result count];i++)
    {
            NSDictionary *values = (NSDictionary*)[result objectAtIndex:i];
            NSLog(@"Training_Code: %@  Training_Duration: %@",[values objectForKey:@"Training_Code"],[values objectForKey:@"Training_Duration"]);
    }

これで、NSDictionary から値を取得して、データベースに追加するだけです。

于 2013-02-20T08:42:49.487 に答える
0

これは、エンコードされた JSON 配列を含む文字列です。JSON デコーダー (iOS 5 以降に含まれるバッテリー) を使用して NSArray に変換し、それを実行する必要があります。

次の(テストされていない)コードは、ほぼ正しいはずです。

// Assuming jsonArray is an object with an NSString property, d...
NSData *data = [jsonArray.d dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;
NSArray *d = [NSJSONSerialization JSONObjectWithData:data options:0 error:err];
// Check for errors.
for (NSDictionary *row in d) {
    NSString *trainingCode = [row objectForKey:@"Training_Code"];
    …
    // Insert into SQLite here.
}

Xcode の最近のバージョンでは、row[@"Training_Code"]代わりに[row objectForKey:@"Training_Code"].

于 2013-02-20T08:54:13.327 に答える