Assuming both XML plist and JSON are delivered over http, gzipped, which one will be processed faster on an iPhone?
A co-worker and I did some rudimentary benchmarks recently to test which was faster for an application we were writing. We tested this JSON framework, and the NSXML parser as well as a TreeNode parser we found in an Objective-C book. Here is the note I sent to the other developers on our team:
The benchmark tested how each library handled getting the filename and path
of 100 assets, 100 times each (for a total count of 10,000 runs per library).
The results are below:
Method Average(s) Total(s)
TreeNode 0.307475 30.747493
NSXML 0.483778 48.377843
JSON 0.233179 23.317870
JSON beats plists according to this:
http://samsoff.es/posts/web-services-with-cocoa-surprise
It depends on the data that is delivered and the way it is parsed, but they should both be similar in speed. You should just choose the one that is easier for you to develop a parser and then fine tune the parser.
In the "Building a Server-Driven User Experience" session of WwDC, an Apple developer stated that PLIST was preferred for being faster and easier to use.
Related
Can any body tell me which parser is best in my condition? XML, JSON or any else ?
The app contains feature link sync the data, communicate with the web-service and etc. So I am targeting parser which is light weight and fast.
I have lots of data which are parsed between iPhone and server.
Which are the option? Or any good link for comparison between different parser ?
I would suggest JSON as in terms of data size json tends to be compact compared to XML. Which will reduce time spent in network transfer (for your data).
You could use any available JSON parsers to directly get ObjectiveC objects. Some Json parsers -
NSJSONSerialization
json framework
jsonKit
I personally prefer jsonKit as its supposed to be fastest of all.
Of course it's JSON.
This is the frequent question asked on stack.You could find much better answer just by Goggling.
JSON has several advantages over XML. Its a lot smaller and less bloated, so you will be passing much less data over the network - which in the case of a mobile device will make a considerable difference.
Refer to JSON Tutorial for iPhone.
Mr.Devang. I recommend NSXMLParser. If your data or response from service will be in XML format please use NSXMLParser. Apple have inbuilt xml parsing tool. Please refere Apple document fir NSXMLParser,
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html
http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSXMLParserDelegate_Protocol/Reference/Reference.html
And also, if you receive your web-service response in JSON format, you can use SBJSON to parse the JSON files. You can get the json framework form this link,
https://github.com/stig/json-framework/
Thanks.
If you would like to know about different XML Parsers available and comparison between them, you can visit this tutorial which shows different xml parsers available and comparison between them.
I'm getting a large JSON string (11MB) from a web service. When I parse the data using JSONKit, my app reaches 70MB, I get memory warnings, and the app crashes.
How can I parse this data?
the easiest solution is reducing the json size you are getting from the server. If you cant to it, the only way to parse huge JSON is using lazy evaluation.
I dont think there is a JSON lib for objective-c that supports lazy evaluation. however you can implement one.
Your best bet is to look at the YAJL JSON parser, that supports event driven parsing. Then you can parse the JSON as it comes down in a data feed, and not have to store the whole thing in memory at once.
https://github.com/gabriel/yajl-objc
Sorry, I don't know of any code examples that demonstrate this use in practice.
SBJson supports parsing a stream of data. This lets your process your document bit by bit so you don't need to hold on to the entire document. The distribution contains two examples of how to use this. First there's the StreamParserIntegrationTest.m and next there's the TweetStream demo app: a twitter application that will sit and parse a HTTP stream all day (if you let it) displaying each tweet as they come in and then throw them away.
(Disclaimer: I am SBJson's author.)
11 mb is a largedata and solution is only to minimise your size of data
JSON support is not native to iOS, but there is a great framework for this exact purpose: http://code.google.com/p/json-framework/
This framework supports conversion from raw JSON objects to Objective-C objects (NSArray, NSDictionary) and vice versa.
I want to make use of JSON in iOS, but my JSON data files are stored inside the app bundle. Which library would be the most simple for this? What can you recommend?
TouchJSON seams to be dead:
http://code.google.com/p/touchcode/ - it redirects to this: https://github.com/schwa/touchcode (404)
Take a look at https://github.com/stig/json-framework/:
JSON (JavaScript Object Notation) is a light-weight data interchange format that's easy to read and write for humans and computers alike. This framework implements a strict JSON parser and generator in Objective-C.
Take a look at JSONKit: https://github.com/johnezang/JSONKit. It is pretty up-to-date (last updated June 2011).
What's the best method for editing and saving a JSON file on the iPhone/iPod? I know there are libraries that allow you to easily read JSON data, but are there any that allow you to generate it?
TouchJSON reads and generates JSON, is quite fast, and uses very little memory.
JSON Framework is supposedly faster, but uses much more memory.
The iPhone also includes a built-in JSON parser/generator, but it's only available through private APIs. You probably shouldn't use this one.
TouchJSON allows conversion both to and from JSON with a single call like:
[[CJSONSerializer serializer] serializeObject:someDictionaryofYours];
I'm developing an iPhone app that is connected to a backend server. It needs to communicate with it many times, through several requests. I'm sending HTTP messages, but I want to receive more complex responses that I can parse somehow. Supposedly, I can provide any type of format for responses from the server, so my question is: which one would be easier(maybe even faster) to use/parse for Objective-C/Cocoa, and transform in a dictionary of some kind?
I know it's a bit subjective but I still think it's a valid question, some programming languages just have more support for some formats and less for others.
From Cocoa 's perspective, the simplest format is a property list as Cocoa can parse this natively into a dictionary or an array.
You can use NSDictionary's +dictionaryWithContentsOfFile: and +dictionaryWithContentsOfUrl: to read a plist file into a dictionary.
If your plist data is not in a file, you can also convert an NSData object containing plist data to a dictionary with +[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:] or convert an NSString to a dictionary with -[NSString propertyList].
PList is a good answer and very usable, but many server side people will be more comfortable producing JSON - TouchJSON is a very good JSON parser for the iPhone.
While there is a plist gem for ruby, JSON or (raw) XML are much more popular outside the Apple world. For instance most JavaScript libraries are set up to speak one or both of these.
So if you're exclusively talking to an iPhone, the plist is probably a good choice, but otherwise you should consider using JSON (or XML).