Извините за длинный пост … много данных.
У меня проблемы с хранением JSON в NSUserDefaults. Я построил серверную службу PHP, которая на обеих страницах возвращает JSON. Я не уверен, почему один JSON может храниться, а другой нет ….
заранее спасибо
В общем, вот код PHP, который возвращает данные
header('Content-Type: application/json; charset=utf-8');
echo json_encode($rows,JSON_PRETTY_PRINT);
socialmedia.php ВОЗВРАЩАЕТСЯ:
{
"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"}
]
}
]
}
Я могу сохранить его в NSUSERDefault, используя
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")
Это все хорошо … и работает как положено ….
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"}
]
}
Я иду, чтобы хранить его с
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")
и я в конечном итоге
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'
Вам нужно обрезать JSON, либо удалив значения NSNull, либо заменив их значениями по умолчанию.
Других решений пока нет …