Как отформатировать скобки вложенного JSON - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь создать строку, которая содержит данные JSON.У меня проблема с форматированием внутренних вложенных данных, в настоящее время они имеют квадратные скобки «[]», и я пытаюсь изменить их на «{}», поэтому это допустимый JSON.Существуют ли лучшие подходы / решения для анализа этих данных?

Фактические результаты:

[
    [
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    ], 
    [
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    ]
]

Желаемые результаты

[
    {
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    }, 
    {
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    }
]

Код

    // Parse and loop through the JSON
    for (NSDictionary * dataDict in eventArray) {
        NSMutableArray *array = [[NSMutableArray alloc] init];

        eventTime = [NSString stringWithFormat:@"%@%@",@"eventtime\":\"",[self eventTimeConversion:[dataDict objectForKey:@"event_time"]]];
        keyID =  [NSString stringWithFormat:@"%@%@",@"keyid\":\"",[dataDict objectForKey:@"key_id"]];
        editTime = [NSString stringWithFormat:@"%@%@",@"edittime\":\"",[self eventTimeConversion:[dataDict objectForKey:@"event_time"]]];
        projectID = [NSString stringWithFormat:@"%@%@",@"projectid\":\"",[gotHeaders objectAtIndex:0]];
        lockID =  [NSString stringWithFormat:@"%@%@",@"doorid\":\"",[dataDict objectForKey:@"lock_id"]];
        eventType = [NSString stringWithFormat:@"%@%@",@"eventid\":\"",[dataDict objectForKey:@"event_type"]];

        [array addObject:eventTime];
        [array addObject:keyID];
        [array addObject:editTime];
        [array addObject:projectID];
        [array addObject:lockID];
        [array addObject:eventType];

        [event_array  addObject:array];
    }
}

NSData *jsonnData = [NSJSONSerialization dataWithJSONObject:event_array options:NSJSONWritingPrettyPrinted error:&error];
NSString *eventsString = [[NSString alloc] initWithData:jsonnData encoding:NSUTF8StringEncoding];

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

Не создавайте строку JSON вручную , создавайте словари, это упрощенный пример для ключей eventtime и keyid

В коде используется современный синтаксис Objective C(введено не менее 6 лет назад)

NSMutableArray *array = [[NSMutableArray alloc] init];
for (NSDictionary * dataDict in eventArray) {
    NSString *eventTime = [self eventTimeConversion: dataDict[@"event_time"]];
    NSString *keyID = dataDict[@"key_id"];
    [array addObject:@{@"eventtime":eventTime, @"keyid":keyID}];
}
NSError *error;
NSData *jsonnData = [NSJSONSerialization dataWithJSONObject: array options:NSJSONWritingPrettyPrinted error:&error];
NSString *eventsString = [[NSString alloc] initWithData:jsonnData encoding:NSUTF8StringEncoding];
1 голос
/ 20 сентября 2019

Вместо использования массива для хранения параметров идентификатора и значения JSON, используйте NSDictionary:

NSDictionary *d1 = [NSDictionary dictionaryWithObjectsAndKeys:
                    @"eventtime", @"2019-09-20 09:52:47",
                    @"keyid", @"15", nil];
[event_array  addObject:d1];

...

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:event_array 
                    options:NSJSONWritingPrettyPrinted error:&error];
NSString *eventsString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@", eventsString);

Вам, очевидно, придется заменить жестко закодированные значения, которые я поместил в словарь в примерес вашими значениями.

Это выведет:

[
    {
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    }, 
    {
        "eventtime":"2019-09-20 09:52:47",
        "keyid":"15",
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...