从Swift中的JSON文件中读取

问题描述 投票:1回答:1

我正在尝试读取JSON文件,但是当我尝试阅读“ParsedText”时,我一直收到错误。 首先,我将序列化的JSON数据转换为[String: Any]类型的字典,然后我尝试读取dictionary["ParsedResults"]值并将其转换为[String: Any]类型的字典,但它总是失败。

这是JSON文件:

{
    ErrorDetails = "<null>";
    ErrorMessage = "<null>";
    IsErroredOnProcessing = 0;
    OCRExitCode = 1;
    ParsedResults = ( {
            ErrorDetails = "";
            ErrorMessage = "";
            FileParseExitCode = 1;
            ParsedText = "Sample text";
            TextOverlay = {
                HasOverlay = 0;
                Lines = ( );
                Message = "Text overlay is not provided as it is not requested";
            };
        } );
    ProcessingTimeInMilliseconds = 869;
    SearchablePDFURL = "Searchable PDF not generated as it was not requested.";
}

这是swift函数的一部分:

do {
    //create json object from data
    let dictionary = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]

    for (key, value) in dictionary {
        print("KEY: \(key)")
        print("VALUE: \(value)")
    }

    let parsedResults = dictionary["ParsedResults"] as! [String: Any]
    print("parsedResults: \(parsedResults)")

   } catch let error {
      print("ERROR: Could not serialize jSON Data: \(error.localizedDescription)")
    }
   }
json swift parsing
1个回答
0
投票

正如已经评论过的那样,您所说的JSON文件不是JSON格式。

它似乎是一种经典的基于文本的plist格式。如果您确实想要按原样读取文件,可以使用PropertyListSerialization

import Foundation

let data = """
{
    ErrorDetails = "<null>";
    ErrorMessage = "<null>";
    IsErroredOnProcessing = 0;
    OCRExitCode = 1;
    ParsedResults = ( {
            ErrorDetails = "";
            ErrorMessage = "";
            FileParseExitCode = 1;
            ParsedText = "Sample text";
            TextOverlay = {
                HasOverlay = 0;
                Lines = ( );
                Message = "Text overlay is not provided as it is not requested";
            };
        } );
    ProcessingTimeInMilliseconds = 869;
    SearchablePDFURL = "Searchable PDF not generated as it was not requested.";
}
""".data(using: .utf8)

do {
    //create property list object from data
    let dictionary = try PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! [String: Any]

    for (key, value) in dictionary {
        print("KEY: \(key)")
        print("VALUE: \(value)")
    }

    let parsedResults = dictionary["ParsedResults"] as! [[String: Any]] //<- See Larme's comment.
    print("parsedResults: \(parsedResults)")

} catch let error {
    print("ERROR: Could not deserialize plist Data: \(error.localizedDescription)")
}

但我建议您检查生成此类文件的部分,并修复它以生成有效的JSON文件。

© www.soinside.com 2019 - 2024. All rights reserved.