gpt4 book ai didi

php - 来自文本文件的多个 JSON 对象

转载 作者:行者123 更新时间:2023-11-29 02:26:13 26 4
gpt4 key购买 nike

您好,我正在尝试使用多个 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 对象,谁能告诉我如何将对象合并在一起,或者还有其他解决办法吗?

谢谢。

最佳答案

正如我在评论中提到的,您最好生成一个包含有效 JSON 的文件,而不是尝试解析您自己的 JSON 语法。

您可以通过解析现有的 JSON 并根据需要附加对象来完成此操作。

概念(未测试)示例:

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

更新

好的,据我所知,您有两个环境。你有客户端和服务器。我没有注意到的是,各个日志消息是由您的 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));
}

关于php - 来自文本文件的多个 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com