JSON IPHONE:如何发送 JSON 请求并从服务器提取数据?

2024-04-22

我对 JSON 几乎一无所知,我需要仅使用 iPhone 向服务器发送请求并读取来自它的数据。

我尝试过使用杰森框架 https://github.com/stig/json-framework这样做,但在阅读文档后,我无法弄清楚如何构造该对象并根据请求发送它。所以我决定改编我在这里看到的另一个代码。

我需要的对象是这样的:

{“代码”:xxx }

我这里有一个问题。这个xxx是一个NSData,所以我怀疑我必须将这个数据转换为字符串,然后使用这个字符串构建一个对象并在请求上发送它。

服务器响应也是一个 JSON 对象,格式为

{“答案”:“yyy”} 其中 yyy 是 10000 到 99999 之间的数字

这是我到目前为止的代码。

- (NSString *)checkData:(NSData) theData {
    NSString *jsonObjectString = [self encode:(uint8_t *)theData length:theData.length];      
    NSString *completeString = [NSString stringWithFormat:@"http://www.server.com/check?myData=%@", jsonObjectString];                               
    NSURL *urlForValidation = [NSURL URLWithString:completeString];               
    NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];                          
    [validationRequest setHTTPMethod:@"POST"];             
    NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];  
    [validationRequest release];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
    NSInteger response = [responseString integerValue];
    NSLog(@"%@", responseString);
    [responseString release];
    return responseString;
}


- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t *output = (uint8_t *)data.mutableBytes;

    for (NSInteger i = 0; i < length; i += 3) {
        NSInteger value = 0;
        for (NSInteger j = i; j < (i + 3); j++) {
            value <<= 8;

            if (j < length) {
                value |= (0xFF & input[j]);
            }
        }

        NSInteger index = (i / 3) * 4;
        output[index + 0] = table[(value >> 18) & 0x3F];
        output[index + 1] =                    table[(value >> 12) & 0x3F];
        output[index + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] : '=';
        output[index + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] : '=';
    }

    ret

    urn [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}

所有这些代码给我的是错误。或 BAD URL 或 java 异常。

这段代码有什么问题?

如果你们更喜欢使用 json 框架提供另一个解决方案,请告诉我如何使用该对(“代码”,“我的 NSData 转换为字符串”)对对象进行编码...

谢谢你的帮助。


JSON 框架支持转换数组、字典、字符串、数字和布尔值。因此,您要做的就是将数据转换为这些格式之一。由于您的数据是 NSData,最简单的方法是将其转换为:

NSString* stringData = [[NSString alloc] initWithData:yourData
                                             encoding:NSUTF8StringEncoding];

根据缓冲区中的内容(以及您的服务器是否可以处理它),您可能需要对结果进行 Base64 编码(检查http://www.cocoadev.com/index.pl?BaseSixtyFour http://www.cocoadev.com/index.pl?BaseSixtyFour如果你手边没有转换器)。您甚至可以直接从 NSData 转换为 Base64 编码的字符串。

现在创建一个字典,其中包含一个带有键的项目code和价值stringData(从上一步开始):

NSDictionary* jsonDictionary = [NSDictionary dictionaryWithObject:stringData
                                                           forKey:@"code"];

这可以轻松转换为 JSON。只需在代码头中导入 JSON.h,然后使用:

NSString* jsonString = [jsonDictionary JSONRepresentation];

将其转储出来,您将看到 JSON 字符串——类似于:{"code" : "{yourstringdata}"; }。将其发送到服务器的最简单方法是使用ASIHTTP请求 http://allseeing-i.com/ASIHTTPRequest/具有 POST 方法的库。

一旦你从服务器返回结果,JSON 框架就可以将其解析回字典中,然后你就可以获取你需要的数据:

NSDictionary* responseDict = [yourJSONResponseStringFromServer JSONValue];
NSNumber* answerNum = (NSNumber *) [responseDict objectForKey:@"answer"];
int answer = [answerNum intValue];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON IPHONE:如何发送 JSON 请求并从服务器提取数据? 的相关文章

  • iPhone Developer' 与任何有效的、未过期的证书/私钥对不匹配 - 但我正在创建 iPad 应用程序 [重复]

    这个问题在这里已经有答案了 可能的重复 代码签名错误 身份 iPhone Developer 与默认钥匙串中的任何有效证书 私钥对不匹配 https stackoverflow com questions 2108503 code sign
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • 将 CALayer 旋转 90 度?

    如何旋转CALayer90度 我需要旋转所有内容 包括子图层和坐标系 Obj C theLayer transform CATransform3DMakeRotation 90 0 180 0 M PI 0 0 0 0 1 0 Swift
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • 使用 urllib2 从 FlightRadar24 获取数据时出现问题

    我正在尝试使用下面的脚本从 FlightRadar24 获取数据 基于这个答案 https stackoverflow com a 526695 3904031来处理cookies 当我当前在浏览器中输入该 url 时 我会得到一个不错的长
  • iPhone,如何隐藏标签栏按钮?

    如何隐藏单个标签栏按钮 我已经搜索过 但什么也没找到 只找到了完整的栏 我已经取得了一些进展 但仍然遇到问题 此代码位于我的应用程序委托中 带有选项卡栏的出口 我在其中调用它viewDidLoad选项卡栏中显示的第一个视图的视图 void
  • CALayer 抗锯齿不如 UIView 抗锯齿

    我一直在尝试使用 CALayer 制作圆形绘图的动画 一切都运行良好 但问题是 绘制的圆不够抗锯齿 它的边界有点太粗糙 或者如果使用光栅化则模糊 抗锯齿已启用 还尝试过 边缘抗锯齿遮罩 kCALayerLeftEdge kCALayerRi
  • nvd3 格式化日期始终返回 1970-01-01

    我正在尝试使用构建折线图nvd3 for d3js但我在 x 轴上使用日期域时遇到了一些问题 这是我的代码 data lineChart key key1 values x 2014 04 20 y 6 x 2014 04 13 y 5 x
  • 如何将设备令牌和应用程序版本发送到服务器

    我已经实现将设备令牌和应用程序版本发送到 serverm 它在模拟器 硬编码数据 中工作正常 但在设备中无法工作 任何形式的帮助将不胜感激 先感谢您 这是代码 void application UIApplication applicati
  • ARC 可以与 Core Graphics 对象一起使用吗?

    我最近开始了一个使用自动引用计数 ARC 的新项目 当我分配 CALayer 的内容时 UIView view UIImage image view layer contents image CGImage 我收到一个错误 ARC 不允许将
  • 在 cocoa touch 中以编程方式将视图位置设置为右上角

    我需要确保一个视图 A 尺寸 200x200 始终与第二个视图 B 全屏尺寸 内的右上角对齐 我想确保无论设备方向如何 视图 A 都保留在该位置 事实是 当使用界面生成器来定位视图时 我对此没有任何问题 但我需要以编程方式构建它 我想我应该
  • iphone opencv - 模板匹配

    我已经在我的 iphone 项目中实现了这个 OpenCV 构建 http aptogo co uk 2011 09 opencv framework for ios http aptogo co uk 2011 09 opencv fra
  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 如何在 xcode 中使用相同的 nib 文件创建多个窗口

    我有一个使用表格视图作为界面的 iPhone 应用程序 每次用户点击其中一个表格单元格时 我想向用户显示另一个窗口 然而 我推入导航控制器的窗口的用户界面非常相似 因此 我决定制作一个 通用 nib 文件 以便在该通用 nib 文件的文件所
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List

随机推荐

  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • 重写纯虚函数时使用“override”有什么意义吗?

    例如 class Base virtual void my function 0 class Derived Base void my function override 从我读到的来看 override关键字用于确保我们在重写的函数中具有
  • jQuery Mobile 将下一个输入集中在按键上

    我有一个 jquery 移动网站 其 html 表单由 4 个引脚输入框组成 我希望用户能够在每个输入字段中输入 pin 而不必按 iphone 键盘的 下一步 按钮 我尝试了以下操作 虽然它似乎将焦点设置到第二个输入并插入值 但键盘消失了
  • 在 C# 中重新抛出异常的正确方法是什么? [复制]

    这个问题在这里已经有答案了 这样做是否更好 try catch Exception ex throw Or this try catch Exception ex throw ex 他们做同样的事情吗 这个比那个好吗 您应该始终使用以下语法
  • 如何使用 PHP 发送带有内嵌附加图像的 HTML 电子邮件

    我有一个 PHP 脚本 它发送一封带有附加图像的 HTML 电子邮件 它工作得很好 但是 我无法让附件显示在 img 电子邮件正文中的标签 附件文件名为postcard png服务器上的原始文件名是4e60348f83f2f png 我尝试
  • 在 Python 中生成、填充和绘制六角形晶格

    我想修改我的在方晶格 它是基于代理的生物学模型 上运行的Python脚本 以在六边形宇宙中工作 这就是我在方形模型中创建和初始化二维矩阵的方法 基本上 N 是晶格的大小 R 给出了我需要在算法开始时更改值的矩阵部分的半径 a np zero
  • ws2_32.lib 与 libws2_32.a,有什么区别以及如何将 libws2_32 链接到 NB 项目?

    我使用 NetBeans Windows 和 Cygwin 以及 g 编译器 我正在研究 Windows Sockets 2 我所做的一切都是用 MS 编写的manual http msdn microsoft com en us libr
  • 如何在Google表格中提取多个大写字母的姓名?

    我正在尝试提取数据集的联系人姓名 但是 这些姓名被编译在一个单元格中 而不是按名字 中间名 姓氏 电子邮件等分割 我只需要获取他们的名字 因为我已经有一个仅包含他们的电子邮件的数据集 而不是他们的名字 如何提取多个区分大小写的单词并将其拆分
  • 如何在 jquery.load 过程中添加 jquery load.gif?

    我想用用jQuery load 加载一些内容 如何在加载过程中添加微调器 content load b php abc 假设您的页面上有一个隐藏的微调器 img src spinner gif alt loading style displ
  • Scala 无法推断

    我有一个非常简单的 Spark 代码片段 它在 Scala 2 11 上运行 并在 2 12 后停止编译 import spark implicits val ds Seq val toDF col1 ds foreachPartition
  • VS 2017 RC:我无法更新 Nuget 中的 NETStandard.Library

    从上次 或者可能是最后两次 更新开始 我无法更新 Nuget 中的 NETStandartLibrary 包 我刚刚创建一个新的标准库项目 请参阅此消息 在项目的属性中 版本不同 在 csproj 中
  • 我们如何使用 Angular 按时间戳数据类型对 Firebase Firestore 数据进行排序?

    我有票务发布 Web 应用程序 并且我只会显示那些有效且 24 小时内记录的票证 从现在开始 我在用Firebase 云 Firestore with 角7 getTicketList this ticketData this fireSt
  • UTF-8 可以包含零字节吗?

    UTF 8 字符串可以包含零字节吗 我要通过 ascii 明文协议发送它 我应该使用诸如 base64 之类的东西对其进行编码吗 是的 UTF8 中的零字节是代码点 0 NUL 有no将使用 UTF8 编码的其他 Unicode 代码点 其
  • 在 iPhone 上以编程方式接听来电

    我们如何在 iPhone 上使用 Objective C 以编程方式接听来电 你不能 您甚至没有收到通知或任何有来电的通知 您所能做的就是要求 iPhonemake一个电话 通过tel URI 方案 但您甚至不知道电话是否确实拨打了该号码
  • 如何用 C 生成 HTTP Content-Type 标头?

    所以我正在做一项网络任务 用 C 语言生成一个基本的 HTTP 1 0 Web 服务器 我已经弄清楚了大部分内容 但要求之一是它正确填充标头中的 Content Type 字段 并且我似乎找不到任何方法来自动执行此操作 我已经在使用 fst
  • cmd dir /b/s 加日期

    我正在 Windows XP 中寻找 cmd shell 命令 例如 dir b s 其中包含结果中每个文件的日期和时间值 所有数据 路径 文件名和日期 时间 都需要位于一行上 任何人都可以提供命令来完成此任务吗 谢谢 如果您只想要文件 f
  • 如何在 Greasemonkey 脚本中模拟按键?

    我在网上找到了很多关于如何使用的信息initEvent and dispatchEvent功能 https developer mozilla org en US docs DOM element dispatchEvent 但我一生都无法
  • 从小部件启动活动

    我正在尝试做一些本来应该很容易的事情 但这让我发疯 我试图在按下主屏幕小部件时启动一个活动 例如小部件的配置活动 我想我已经逐字逐句地遵循了 Android 开发者网站上的教程 甚至还有一些非官方教程 但我一定错过了一些重要的东西 因为它不
  • 从浏览器小程序使用 JDBC 时出现“访问被拒绝”

    我有一个 Java 小程序 可以查询 Oracle 数据库中的数据 当从 IDE 内部运行时 它运行得很好 但是 当我将它作为嵌入网页中的小程序运行时 我在类加载器中收到 访问被拒绝 错误 并且我根本不知道它对我的要求是什么 Sep 06
  • JSON IPHONE:如何发送 JSON 请求并从服务器提取数据?

    我对 JSON 几乎一无所知 我需要仅使用 iPhone 向服务器发送请求并读取来自它的数据 我尝试过使用杰森框架 https github com stig json framework这样做 但在阅读文档后 我无法弄清楚如何构造该对象并