Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift json parse致命错误:在展开可选值时意外发现nil_Ios_Json_Swift - Fatal编程技术网

Ios Swift json parse致命错误:在展开可选值时意外发现nil

Ios Swift json parse致命错误:在展开可选值时意外发现nil,ios,json,swift,Ios,Json,Swift,您好,当我解析json数据时,这里的代码给了我致命的错误 let queue = NSOperationQueue(); NSURLConnection.sendAsynchronousRequest(storeRequest, queue: queue, completionHandler: { (response : NSURLResponse?, data : NSData?, error : NSError?) -> Void in if(error != nil){

您好,当我解析json数据时,这里的代码给了我致命的错误

let queue = NSOperationQueue();
NSURLConnection.sendAsynchronousRequest(storeRequest, queue: queue, completionHandler: { (response : NSURLResponse?, data : NSData?, error : NSError?) -> Void in

    if(error != nil){
        //Handle Error
    }
    else{


        var jsonResponse: NSMutableDictionary?
        do{
            jsonResponse = try NSJSONSerialization.JSONObjectWithData(data!,
                                                                      options: NSJSONReadingOptions.AllowFragments) as? NSMutableDictionary;


            print(jsonResponse)

            let info : NSArray =  jsonResponse!.valueForKey("latest_receipt_info") as! NSArray
            let transaction_id: String? = info[0].valueForKey("transaction_id") as? String
            let web_order_line_item_id: String? = info[0].valueForKey("web_order_line_item_id") as? String

    // ...
错误输出

 fatal error: unexpectedly found nil while unwrapping an Optional value                        
当出现致命错误时,请标记此行

let info : NSArray =  jsonResponse!.valueForKey("latest_receipt_info") as! NSArray
我试过了,但没有解决

还有我的json值

{
    environment = Sandbox;
    receipt =     {
        "adam_id" = 0;
        "app_item_id" = 0;
        "application_version" = "3.8";
        "bundle_id" = "com.bla.bla";
        "download_id" = 0;
        "in_app" =         (
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2016-02-18 15:56:23 Etc/GMT";
                "original_purchase_date_ms" = 1455810983000;
                "original_purchase_date_pst" = "2016-02-18 07:56:23 America/Los_Angeles";
                "original_transaction_id" = 1000000194749934;
                "product_id" = "com.bla.ShowMaps";
                "purchase_date" = "2016-02-18 15:56:23 Etc/GMT";
                "purchase_date_ms" = 1455810983000;
                "purchase_date_pst" = "2016-02-18 07:56:23 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000194749934;
            },
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2016-02-18 15:58:37 Etc/GMT";
                "original_purchase_date_ms" = 1455811117000;
                "original_purchase_date_pst" = "2016-02-18 07:58:37 America/Los_Angeles";
                "original_transaction_id" = 1000000194750377;
                "product_id" = "com.bla.ApiSupport";
                "purchase_date" = "2016-02-18 15:58:37 Etc/GMT";
                "purchase_date_ms" = 1455811117000;
                "purchase_date_pst" = "2016-02-18 07:58:37 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000194750377;
            },
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2016-02-18 17:13:03 Etc/GMT";
                "original_purchase_date_ms" = 1455815583000;
                "original_purchase_date_pst" = "2016-02-18 09:13:03 America/Los_Angeles";
                "original_transaction_id" = 1000000194763153;
                "product_id" = "com.bla.Limit";
                "purchase_date" = "2016-02-18 17:13:03 Etc/GMT";
                "purchase_date_ms" = 1455815583000;
                "purchase_date_pst" = "2016-02-18 09:13:03 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000194763153;
            },
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2016-02-18 15:57:43 Etc/GMT";
                "original_purchase_date_ms" = 1455811063000;
                "original_purchase_date_pst" = "2016-02-18 07:57:43 America/Los_Angeles";
                "original_transaction_id" = 1000000194750331;
                "product_id" = "com.bla.BarcodeSupport";
                "purchase_date" = "2016-02-18 15:57:43 Etc/GMT";
                "purchase_date_ms" = 1455811063000;
                "purchase_date_pst" = "2016-02-18 07:57:43 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000194750331;
            }
        );
        "original_application_version" = "1.0";
        "original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
        "original_purchase_date_ms" = 1375340400000;
        "original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
        "receipt_creation_date" = "2016-02-18 17:13:03 Etc/GMT";
        "receipt_creation_date_ms" = 1455815583000;
        "receipt_creation_date_pst" = "2016-02-18 09:13:03 America/Los_Angeles";
        "receipt_type" = ProductionSandbox;
        "request_date" = "2016-02-18 17:13:05 Etc/GMT";
        "request_date_ms" = 1455815585353;
        "request_date_pst" = "2016-02-18 09:13:05 America/Los_Angeles";
        "version_external_identifier" = 0;
    };
    status = 0;
}
如何进入json响应示例让product_id=mysender值?所以,

像这样

info = jsonResponse["receipt"]!["in_app"] 

谢谢

除了未指定的
JSON
结构之外,假设它不总是正确返回,您需要通过不隐式地展开
JSON
对象来解释它。您还应该使用纯Swift数组,而不是
NSArray
s,它们在需要时连接到Objective-C

在可能的情况下使用订阅也是一种很好的方式

if let jsonResponse = jsonResponse,
  info = jsonResponse["latest_receipt_info"] {
  // Makes sense to check if count > 0 if you're not sure, but...
  let transaction_id = info[0]["transaction_id"] as? String
  let web_order_line_item_id = info[0]["web_order_line_item_id"] as? String
  // Do whatever else you need here
}
如果我正确理解了第二个问题,您可以通过解析数组和迭代对象来获得该值,从而获得
product\u id
s,如下所示:

if let receipt = jsonResponse["receipt"],
  info = receipt["in_app"] as? [Dictionary<String, AnyObject>] {
  for object in info {
    print(object["product_id"])
  }
}
如果let receive=jsonResponse[“receive”],
信息=收据[“在应用程序中”]作为?[字典]{
对于信息中的对象{
打印(对象[“产品标识”])
}
}

…或者类似的东西,因为信息是一个对象数组。您可能需要根据自己的目的对此进行调整。

除了未指定的
JSON
结构之外,假设它不总是正确返回,您需要通过不隐式地展开
JSON
对象来解释它。您还应该使用纯Swift数组,而不是
NSArray
s,它们在需要时连接到Objective-C

在可能的情况下使用订阅也是一种很好的方式

if let jsonResponse = jsonResponse,
  info = jsonResponse["latest_receipt_info"] {
  // Makes sense to check if count > 0 if you're not sure, but...
  let transaction_id = info[0]["transaction_id"] as? String
  let web_order_line_item_id = info[0]["web_order_line_item_id"] as? String
  // Do whatever else you need here
}
如果我正确理解了第二个问题,您可以通过解析数组和迭代对象来获得该值,从而获得
product\u id
s,如下所示:

if let receipt = jsonResponse["receipt"],
  info = receipt["in_app"] as? [Dictionary<String, AnyObject>] {
  for object in info {
    print(object["product_id"])
  }
}
如果let receive=jsonResponse[“receive”],
信息=收据[“在应用程序中”]作为?[字典]{
对于信息中的对象{
打印(对象[“产品标识”])
}
}

…或者类似的东西,因为信息是一个对象数组。您可能需要根据自己的目的对此进行调整。

您的jsonResponse(或“最新收据信息”键)似乎为零。在这种情况下,您不能使用“!”因为这意味着你确信任何一个都不会为零。相反,在执行任何操作之前,首先检查它们是否存在。

您的jsonResponse(或“最新收据信息”键)似乎为零。在这种情况下,您不能使用“!”因为这意味着你确信任何一个都不会为零。相反,在执行任何操作之前,首先检查它们是否存在。

man我如何获取这些json值?我把代码加在下面了,我不知道你的意思。哪些值?我添加了我想要的json输出,例如:;我的product_id=“com.bla”等于信息行中对象所需的json输出值给出错误:“AnyObject”类型的值没有成员“Generator”,请尝试将信息转换为所需的数组类型。请参阅更新的答案以获取建议。我如何获取json值?我把代码加在下面了,我不知道你的意思。哪些值?我添加了我想要的json输出,例如:;我的product_id=“com.bla”等于信息行中对象所需的json输出值给出错误:“AnyObject”类型的值没有成员“Generator”,请尝试将信息转换为所需的数组类型。请参阅更新的答案以获取建议。我最近在尝试从laravel json服务器获取json数组时也有类似的经历。过了一会儿,我注意到有一些url值包含一些斜杠字母,并在后端对它们进行了编码,以防止json数组结构崩溃。我最近在尝试从laravel json服务器获取json数组时也有过类似的经历。过了一会儿,我们注意到一些url值包含一些斜杠字母,并在后端对它们进行了编码,以防止json数组结构崩溃。