从文本文件加载 Json 对象 - 返回未捕获的语法错误:意外标记“[”

Posted

技术标签:

【中文标题】从文本文件加载 Json 对象 - 返回未捕获的语法错误:意外标记“[”【英文标题】:Loading Json Objects from text file - Returning Uncaught SyntaxError: Unexpected token " [ " 【发布时间】:2014-12-16 11:34:33 【问题描述】:

我在从文本文件中获取 Json 对象并能够在 javascript 函数中使用它们时遇到问题。但是,如果只有一个 Json 对象,它就可以工作。然后,当我开始拥有多个 Json 对象时,它给了我错误:Uncaught SyntaxError: Unexpected token [

下面是我的代码:

iOS

    NSString *post = @"";
    NSDictionary *firstJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1025", @"DateandTime", logString, @"Description", [self getLogTypeName:(LOGS)level], @"LoggingLevel", nil];
    NSMutableArray *arrayTest = [[NSMutableArray alloc] init];

    [arrayTest addObject:firstJsonDictionary];
    NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arrayTest options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];


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

    NSLog(@"Post Data: \n%@", post);
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSURL *logURL = [NSURL URLWithString:@"Testphp.php"];
    NSMutableURLRequest *logRequest = [NSMutableURLRequest requestWithURL:logURL];
    [logRequest setHTTPMethod:@"POST"];
    [logRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [logRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [logRequest setHTTPBody:postData];
    NSURLConnection *logConnection = [[NSURLConnection alloc] initWithRequest:logRequest delegate:self];

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);
          );

      );
    

文本文件

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

如果有人能解释我做错了什么,那就太好了。 提前谢谢你。

【问题讨论】:

@bansi 什么? Sure they are.你从哪里听到的? 【参考方案1】:

问题是您的字符串不是有效的 Json 字符串。 如果你像这样修改你的字符串,它应该可以工作:

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

你还需要稍微调整你的代码,因为你得到的结构有点不同。

另外,当你想验证一个 Json 文件时,你可以使用JSonLint.

【讨论】:

这个 Json 字符串有效,你知道如何修复我的代码以使 Json 字符串像这样写入文件吗?而不是它现在是怎么做的?因为我在 ios 中使用 NSDictionary 来制作 jsonObject。 很遗憾,我不了解 IOS,所以这方面我无能为力。 别担心,我会看看如何在 iOS 中创建一个有效的 json 字符串。感谢您帮助显示有效的 Json 字符串【参考方案2】:

这就是你制作数组的方式

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

【讨论】:

以上是关于从文本文件加载 Json 对象 - 返回未捕获的语法错误:意外标记“[”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的语法错误意外令牌 U JSON

UICollectionView 使用自定义布局抛出未捕获的异常

带有名为“-1”的对象的 JSON

未捕获(承诺中)TypeError:将循环结构转换为 JSON

使用 circe 解码 JSON 对象时捕获未使用的字段

Jquery 加载返回 [object 对象]