2014-12-16 9 views
0

Привет, я пытаюсь использовать объекты mutiple json, как показано в примере ниже.Несколько объектов JSON из текстового файла

[ 
    { 
    "DateandTime" : "1025", 
    "LoggingLevel" : "ERROR", 
    "Description" : "Test" 
    } 
] 
[ 
    { 
    "DateandTime" : "1025", 
    "LoggingLevel" : "ERROR", 
    "Description" : "Test" 
    } 
] 

Это, как она создается со стороны IOS, потому что я только создать один из объектов, в то время, потому что это для системы протоколирования отчетов и нужно только сообщение передается, когда это необходимо. Таким образом, объекты Json создаются в разное время и добавляются к файлу.

Я знаю, что правильная строка Json будет выглядеть следующим образом.

[ 
    { 
    "DateandTime" : "1025", 
    "LoggingLevel" : "ERROR", 
    "Description" : "Test" 
    }, 

    { 
    "DateandTime" : "1025", 
    "LoggingLevel" : "ERROR", 
    "Description" : "Test" 
    } 
] 

Однако это не то, что мне нужно. Есть ли способ использовать два отдельных объекта Json?

IOS

NSString *DataString = [NSString stringWithFormat:@"{ \"DateandTime\":\"%@\", \"Description\":\"%@\", \"LoggingLevel\":\"%@\" }", @"1025", logString, [self getLogTypeName:(LOGS)level]]; 
    NSMutableArray *CurrentData = [NSJSONSerialization JSONObjectWithData:[DataString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; 
    NSMutableArray *ArrayOfData = [[NSMutableArray alloc] init]; 
    [ArrayOfData addObject:CurrentData]; 
    NSData *JsonObject = [NSJSONSerialization dataWithJSONObject:ArrayOfData options:0 error:nil]; 
    NSString *jsonString = [[NSString alloc] initWithData:JsonObject encoding:NSUTF8StringEncoding]; 

    post = [NSString stringWithFormat:@"Message=%@", jsonString]; 

PHP

$file = 'testingFile.txt'; 
// Open the file to get existing content 
$current = file_get_contents($file); 
if (isset($_POST['Message'])) { 
// Append a new person to the file 
$current .= $_POST['Message'] . PHP_EOL; 
// Write the contents back to the file 
file_put_contents($file, $current); 

} else { 
    $Contents = file_get_contents($file); 
    echo $Contents; 
} 

Javascript

function GetLoggingData() { 
    $.get("../ISOSEC/logging/TestPHP.php", function(data){ 
     $.each($.parseJSON(data), function(idx, obj) { 
     console.log(obj.DateandTime); 
     console.log(obj.LoggingLevel); 
     console.log(obj.Description); 
     AddLog(obj.DateandTime, obj.LoggingLevel, obj.Description); 
     }); 

    }); 
} 

Может кто-нибудь показать мне, как я мог бы объединить объекты вместе, если есть уже объект JSON в файле или есть ли другая работа?

Спасибо.

+0

Вы должны создать действительный JSON для JSON парсер для успешного синтаксического анализа Это.Я уверен, что вы можете сделать некоторые обходные пути в стороне парсера, чтобы заставить его работать. Но почему бы вам не приложить свои усилия для написания надлежащего JSON в первую очередь? –

+0

Как @RonniEgeriis сказал, что было бы намного легче прочитать проверку файла, если есть уже json-строка, если есть новый контент, а затем записать в этот файл, а не искать способ разобрать это. –

+0

@RonniEgeriis Это действительно JSON, если это был только один объект, как я объяснил. Однако я не отправляю все данные JSON одновременно, он отправляется в разное время, потому что они регистрируют отчеты и просто добавляются в текстовый файл. Я обновил свой вопрос, чтобы спросить, может ли кто-нибудь показать мне, как добавить два объекта вместе или по-другому? –

ответ

1

Как я уже упоминал в своем комментарии, вы бы лучше генерировать файл с действительным JSON, а не пытаться разобрать свой собственный синтаксис JSON.

Вы можете сделать это, проанализировав существующий JSON и добавив объекты по мере необходимости.

Концептуальный (не проверено) пример:

NSMutableArray *currentData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers errors:&errors]; 
[currentData addObject:newObject]; 
NSData *updatedJSONData = [NSJSONSerialization dataWithJSONObject:currentData options:0 errors:&errors]; 

Update

Итак, насколько я вижу свой вопрос, у вас есть две среды. У вас есть клиент и сервер. Я не понял, что отдельные сообщения журнала обрабатываются вашим PHP-скриптом.

Вот что я хотел бы сделать в вашем приложении:

NSError *error; 

// Simplify the generation of your dictionary 
NSDictionary *logLine = @{ 
    @"DateandTime": @"1024" 
    @"Description": logString, 
    @"LoggingLevel": [self getLogTypeName:(LOGS)level] 
}; 

// Create JSON string from dictionary 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:logLine options:0 error:&error]; 
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

// Now post jsonStr as the HTTP body to your PHP script 

И это то, что я хотел бы сделать в сценарии:

<?php 

$logFileName = 'testingFile.txt'; 

// Read your current log file contents 
$currentLogJSON = file_get_contents($logFileName); 

// Check the log for any contents 
if (empty($currentLogJSON)) { 
    $currentLog = []; 
} else { 
    $currentLog = json_decode($currentLogJSON); 
    // Ensure that the contents of the log file is an array 
    if (is_array($currentLog)) { 
     $currentLog = []; 
    } 
} 

// Get the new log line from HTTP body 
$newLogLineJSON = file_get_contents('php://input'); 
// Decode the log line which is passed as JSON string 
$newLogLine = json_decode($newLogLine); 
if (json_last_error() == JSON_ERROR_NONE) { 
    // Append the log line to the current log 
    $currentLog[] = $newLogLine; 
    // Write the updated log contents to log file 
    file_put_contents($logFileName, json_encode($currentLog)); 
} 
+0

Сейчас в этом формате - '[{" DateandTime ":" 1025 "," LoggingLevel ":" ERROR "," Description ":" Test "}] '... Однако я получаю ту же проблему, каждый раз, когда что-то регистрируется, это дает мне ту же проблему. '[{" DateandTime ":" 1025 "," LoggingLevel ":" ERROR "," Описание ":" Test "}]' '[{" DateandTime ":" 1025 "," LoggingLevel ":" MESSAGE " , «Описание»: «Another Time Run»}] ' –

+0

Вы понимаете мою концепцию? Что вы читаете текущее содержимое вашего файла журнала, разбираете его в NSObject, добавляете новые данные журнала и снова сериализуете его в данные JSON? –

+0

@Chris Если вы предоставите свой текущий код в своем вопросе, это будет большой помощью, чтобы лучше проиллюстрировать мою идею. –

0

Если ваш файл всегда будет выглядеть как первый пример вы могли бы очень хорошо сделать только preg_replace

Это только subjestion это, вероятно, плохой способ сделать это, но я думаю, что она могла бы работать.

Редактировать

Попробуйте вместо

$NewSingleJsonString = preg_replace("/.\].\[.\s+/s",',',$MultipleJsonString);

+0

preg_replace, похоже, не работает, он ничего не заменяет. –

+0

Я обновил свой ответ, попробовал его –

+0

Это совсем не работает –

Смежные вопросы