zoukankan      html  css  js  c++  java
  • Dealing with JSON on iPhone

    You can easily use the JSON (JavaScript Object Notation) data format in client-server communications 
    when writing an iPhone app. This blog is not suggesting that JSON is a more superior format for data 
    exchange than its counterparts such as XML. In fact, we have many projects that don't use JSON.
    However, handling JSON is relatively straight forward in ObjectiveC.
    Unfortunately, Apple iPhone SDK (as of this writing, the latest is iPhone 2.2.1) doesn't come with 
    a built-in JSON parser. But I found out a good one called json-framework. It is both a generator 
    and a parser. As a generator, json-framework can create JSON data from an NSDictionary. As a parser, 
    you can pass to json-framework an NSString that consists of JSON data and it will return a 
    NSDictionary that encapsulates the parsed data.
    Next, I'm going to show you several examples. Before you proceed, download the library and make 
    sure you add it to your SDK path list (see INSTALL file that comes with it). If setup properly, 
    you should be able to start using the library by importing its header file:
    #import "JSON/JSON.h"
    Consider the following code:
        NSDictionary *requestData = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"grio", @"username",
                             @"hellogrio", @"password",
                              nil];
    This instantiates a new dictionary which we'll turn into a JSON string. To do so, you'll need to 
    use a function called JSONRepresentation. This function is added as a category to NSObject. It 
    means that as long as there's an import of JSON.h file, you can call the function on any NSObject 
    object.
        NSString* jsonString = [requestData JSONRepresentation];
    And this is what you got when you print (NSLog(@"%@", jsonString);):
        {"username":"grio","password":"hellogrio"}
    Parsing is just as simple. Consider the following JSON data:
    {
        "menu": {
            "id": "file",
            "value": "File",
            "popup": {
                "menuitem": [
                {
                    "value": "New",
                    "onclick": "CreateNewDoc()"
                },
                {
                    "value": "Open",
                    "onclick": "OpenDoc()"
                },
                {
                    "value": "Close",
                    "onclick": "CloseDoc()"
                }
                ]
            }
        }
    }
    Assume that this is the data that you received from a web service called and is currently stored 
    in an NSString called jsonResult. To parse it, you need to create SBJSON object and call one of 
    its initialization method, objectWithString.
        SBJSON *json = [[SBJSON new] autorelease];
        NSError *jsonError;
        NSDictionary *parsedJSON = [json objectWithString:jsonResult error:&jsonError];
    If parsing fails for reasons such as invalid construct of JSON format, jsonError variable will 
    be filled with the error info. If it is successful, parsedJSON will contain keys whose values 
    are either an NSString or NSDictionary. Let's look at the inside of parsedJSON:
        NSDictionary* menu = [parsedJSON objectForKey:@"menu"];
        NSLog(@"Menu id: %@", [menu objectForKey:@"id"]);
        NSLog(@"Menu value: %@", [menu objectForKey:@"value"]);
    And here's the output:
        Menu id: file
        Menu value: File
    Observe the JSON data again. popup is an NSDictionary which has an array of menuitem.
        NSDictionary* popup = [menu objectForKey:@"popup"];
        NSArray* menuItems = [popup objectForKey:@"menuitem"];
        NSEnumerator *enumerator = [menuItems objectEnumerator];
        NSDictionary* item;
        while (item = (NSDictionary*)[enumerator nextObject]) {
            NSLog(@"menuitem:value = %@", [item objectForKey:@"value"]);
        }
    And this is the output:
        menuitem:value = New
        menuitem:value = Open
        menuitem:value = Close
  • 相关阅读:
    安装LVS安装LVS和配置LVS的工作比较繁杂
    移动web开发研究
    10个顶级的CSS UI开源框架
    Jquery使用tbody编辑功能实现table输入计算功能
    【开源】Hawk-数据抓取工具:简明教程
    55个最实用大数据可视化分析工具
    Apache本地服务无法自启动问题解决
    网站10大致命SEO错误
    企业管理:名片的重要性
    开发人员应该知道的SEO
  • 原文地址:https://www.cnblogs.com/top5/p/2415950.html
Copyright © 2011-2022 走看看