2016-10-26 4 views
1

長いポスト...申し訳ありません。 JSONをNSUserDefaultsに格納する際に問題が発生しています。私は両方のページでJSONを返すバックエンドPHPサービスを構築しました。私は1つJSONを保存することができ、他にはない理由はわからない....事前にswiftyJSONを格納している問題でNSUserDefaults ...のデータが返されました...同じデータソース

おかげ

一般に

ここデータに

header('Content-Type: application/json; charset=utf-8'); 
echo json_encode($rows,JSON_PRETTY_PRINT); 
を返すPHPコードです

socialmedia.phpのRETURNS:私は「

{ 
    "socialsites": [ 
     { 
      "type": "Government", 
      "entries": [ 
       { 
        "id": "1", 
        "name": "Pete", 
        "address": "https:\/\/website.com", 
        "medium": "WWW", 
        "section": "Government", 
        "zip": "02055", 
        "active": "Y" 
       } 
      ] 
     }, 
     { 
      "type": "School", 
      "entries": [ 
       { 
        "id": "2", 
        "name": "SITE2", 
        "address": "https:\/\/twitter.com\/test", 
        "medium": "TWITTER", 
        "section": "School", 
        "zip": "02055", 
        "active": "Y" 
       } 
      ] 
     }, 
     { 
      "type": "Organizations", 
      "entries": [ 
       { 
        "id": "3", 
        "name": "This Week Inserser", 
        "address": "https:\/\/www.resr.com", 
        "medium": "WWW", 
        "section": "Organizations", 
        "zip": "02055", 
        "active": "Y" 
       } 
      ] 
     } 
    ] 
} 

eventsJSON2.phpが

{ 
    "events": [ 
     { 
      "category": "SCHOOLS" 
     }, 
     { 
      "category": "RELIGOUS ORGANIZATIONS" 
     }, 
     { 
      "category": "NON-RELIGOUS ORGANIZATIONS", 
      "events2": [ 
       { 
        "news_id": "12", 
        "news_id_parent": "12", 
        "series_id": "5", 
        "news_style": "Single-Day", 
        "news_finalized": "0", 
        "news_owner": "2", 
        "news_title": "TEST FOR Change JSON THIS IS A VERY LONG TITLE TO MAKE", 
        "news_contact": "Mr Contact", 
        "news_listdate": "1473944001", 
        "news_start_date": "1477530600", 
        "news_expiration": "1477537200", 
        "news_story": "This is the story text which will be the story text<br \/>This is the story text which will be the story text<br \/>This is the story text which will be the story text<br \/>This is the story text which will be the story text", 
        "news_image1": null, 
        "news_image2": null, 
        "news_ilue": "Y", 
        "news_priority": "N", 
        "news_location": "7 Main Street", 
        "news_location_zip": "02052", 
        "news_time": "", 
        "news_category": "3", 
        "news_admission": "50", 
        "news_needticketing": "N", 
        "news_tickets": "10", 
        "news_tickets_pur": null, 
        "news_tickets_ser": "Y", 
        "news_phone": "555-555-5555", 
        "news_email": "[email protected]", 
        "news_web": "http:\/\/www.cnn.com", 
        "news_sponsor": "Me Sponsor", 
        "news_story_released": "Y", 
        "news_organization": "1", 
        "news_basezip": "02052", 
        "news_surround": "N", 
        "news_attach": null, 
        "news_paid": "NP", 
        "news_weeks": "1", 
        "news_rate": null, 
        "txn_id": null, 
        "news_pay_auth_date": null, 
        "news_pay_date": null, 
        "org_id": "1", 
        "org_name": "New N' Towne", 
        "base_zip": "02052", 
        "description": "Organization for New People", 
        "cat_id": "3" 
       } 
      ] 
     }, 
     { 
      "category": "GOVERNMENT" 
     }, 
     { 
      "category": "RETAIL" 
     }, 
     { 
      "category": "YARD SALES" 
     }, 
     { 
      "category": "OPEN HOUSES" 
     } 
    ] 
} 

をRETURNS ....これは、すべて良いです...と期待どおりに動作

var swiftyJsonVar: JSON = "" 

var userdefaults = UserDefaults.standard 
func gettheData(){ 
    if let test = self.userdefaults.object(forKey: "socialtableJSON"){ 
     print("beginkey") 
     print(test) 
     print("endkey") 
    } 
    let whichzip = userdefaults.object(forKey: "workingZip") 
    Alamofire.request(openEVTjson,method:.get,parameters: ["zip_code":whichzip!]).validate().responseJSON{ 

     responseData in 
     switch responseData.result{ 

     case .success(let jJson): 
      self.keys.removeAll() 
      self.post.removeAll() 
      self.swiftyJsonVar = JSON(jJson) 

      self.userdefaults.set(jJson, forKey: "socialtableJSON") 

を使用してNSUSERDefaultにそれを格納することができメートル私はそれを格納するために行く

var swiftyJsonVar: JSON = "" 
var userdefaults = UserDefaults.standard 

Alamofire.request(openEVTjson,method:.get,parameters: ["zip_code":whichzip]).validate().responseJSON{ 

     responseData in 
     switch responseData.result{ 

     case .success(let jJson): 
      self.swiftyJsonVar = JSON(jJson) 
      self.keys.removeAll() 
      //let test = self.swiftyJsonVar.rawString() 
      //print(test) 
      self.userdefaults.set(jJson, forKey: "lastEventsJSON") 
      self.userdefaults.set(Date().timeIntervalSince1970, forKey: "lastEventsLoad") 

と私はあなたがnsnullを値を削除するか、デフォルト値で置き換えるのいずれかによって、あなたのJSONをトリムアップする必要が

2016-10-26 08:55:31.813 JSONTesting[79483:4081659] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object { 
    events =  (
       { 
      category = SCHOOLS; 
     }, 
       { 
      category = "RELIGOUS ORGANIZATIONS"; 
     }, 
       { 
      category = "NON-RELIGOUS ORGANIZATIONS"; 
      events2 =    (
           { 
        "base_zip" = 02052; 
        "cat_id" = 3; 
        description = "Organization for New People"; 
        "news_admission" = 50; 
        "news_attach" = "<null>"; 
        "news_basezip" = 02052; 
        "news_category" = 3; 
        "news_contact" = "Mr Contact"; 
        "news_email" = "[email protected]"; 
        "news_expiration" = 1477537200; 
        "news_finalized" = 0; 
        "news_id" = 12; 
        "news_id_parent" = 12; 
        "news_ilue" = Y; 
        "news_image1" = "<null>"; 
        "news_image2" = "<null>"; 
        "news_listdate" = 1473944001; 
        "news_location" = "7 Main Street"; 
        "news_location_zip" = 02052; 
        "news_needticketing" = N; 
        "news_organization" = 1; 
        "news_owner" = 2; 
        "news_paid" = NP; 
        "news_pay_auth_date" = "<null>"; 
        "news_pay_date" = "<null>"; 
        "news_phone" = "555-555-5555"; 
        "news_priority" = N; 
        "news_rate" = "<null>"; 
        "news_sponsor" = "Me Sponsor"; 
        "news_start_date" = 1477530600; 
        "news_story" = "This is the story text which will be the story text<br />This is the story text which will be the story text<br />This is the story text which will be the story text<br />This is the story text which will be the story text"; 
        "news_story_released" = Y; 
        "news_style" = "Single-Day"; 
        "news_surround" = N; 
        "news_tickets" = 10; 
        "news_tickets_pur" = "<null>"; 
        "news_tickets_ser" = Y; 
        "news_time" = ""; 
        "news_title" = "TEST FOR Change JSON THIS IS A VERY LONG TITLE TO MAKE"; 
        "news_web" = "http://www.cnn.com"; 
        "news_weeks" = 1; 
        "org_id" = 1; 
        "org_name" = "New N' Towne"; 
        "series_id" = 5; 
        "txn_id" = "<null>"; 
       } 
      ); 
     }, 
       { 
      category = GOVERNMENT; 
     }, 
       { 
      category = RETAIL; 
     }, 
       { 
      category = "YARD SALES"; 
     }, 
       { 
      category = "OPEN HOUSES"; 
     } 
    ); 
} for key lastEventsJSON' 
+1

NSNull値を削除するか、デフォルト値で置き換えることでJSONのサニタイズを行う必要があります。 – Callam

+0

array_walk_recursive($ value、function(&$ item、$ key){ $ item = null === $ item? '':$ item; })を追加しました。私はJSON_ENCODE ..の前にPHPの終わりに私はあなたがアップしたい場合は一度私はあなたをupvoteすることができます。これは命の恩人だった...これに10時間を費やした。もしこれが答えであるなら、私はそれをチェックしupvoteも同様に – BostonMacOSX

+0

'NSData'オブジェクトをあなたの' NSUserDefaults'に保存することができますので、あなたは ''の値を心配する必要はありません。 – Larme

答えて

1

で終わります。

関連する問題