Android与服务器通信通常采用>post发送JSON数据(字符串、数组、字典、自定义对象)给服务器
触发发送的方法
这次Demo是通过点击屏幕触发发送数据给服务器事件
前提需要开启本地模拟服务器
发送JSON字符串
发送字典给服务器
发送数组给服务器
发送oc对象给服务器
先讲对象转换为字典
通过系统提供的JSON解析类进行序列化
觉得不错请点赞支持,欢迎留言或进我的个人群855801563领取架构资料专题目合集90期、BATJTMD大厂JAVA面试真题1000+,本群专用于学习交流技术、分享面试机会,拒绝广告,我也会在群内不定期答题、探讨Web前端开发中,以post方式向服务器发送请求的 *** 作再平常不过。发送post请求时,若需要传递数据,数据是包含在消息主体中的。
传递数据的方式有两种:表单和json。使用表单时,数据类型是普通的文本数据,或文件(大型二进制数据或者包含非ASCII字符的数据)。而json是指序列化后的 JSON 字符串。
对于表单方式,消息主体的编码方式有三种:
x->我们继续之前的话题。很多时候,服务器返回的JSON都不是一个“扁平”的结构,而是包含了各种嵌套,在这一节,我们就来处理如何把各种嵌套的情况,对应到Swift model。
第一种情况,是用对象封装数组,例如,服务器返回了多个视频信息的JSON:
为了把类似这种情况的JSON直接转型成model,我们只要定义下面这样的 struct 就好了:
这里,由于 EpisodeList 和 Episode 都是遵从 Codable 的,因此我们可以直接用之前的方式对JSON解码:
只是这次,对应的Model类型,变成了 EpisodeList 。执行一下,就能在控制台看到下面这样的结果:
第二种情况,服务器还可能直接返回一个数组,而不使用对象封装它:
对这种情况,我们无须声明任何新的类型,只要在解码的时候,指定一个数组类型就好了:
这次,我们就会看到这样的结果:
第三种情况,可以看成是前面两种情况的组合,假设数组中的对象,是通过一个Key索引的:
对于这种情况,数组内的结构,可以用 Dictionary<String: Episode> 表示,而整个JSON,则是这种 Dictionary 的数组,于是,在解码的时候,我们只要把这个类型传递给它就好了:
执行下,就会看到这样的结果:
在这一节最后,我们结合之前说过的这些情况,看一个更一般的例子,假设我们要给视频播放的页面传递一个包含所有要显示内容的JSON,它看上去是这样的:
为了把这段JSON自动转型成Swift model,我们新建一个 struct :
它对应JSON头部视频信息的部分,这里,由于视频难度属于视频信息的一部分,我们把 EpisodeLevel 定义成了一个内嵌类型。
接下来,JSON的后半段,是系列中每一个视频的具体信息,这种情况我们已经处理过了,这里,我们把之前定义的类型整理一下:
可以看到,我们把 EpisodeType 也变成了 Episode 的内嵌类型。最后,我们定义一个表示页面数据的 struct :
这样, EpisodePage 就完全对应我们上面提到的JSON结构了,接下来,使用用 decode 方法解码就好:
执行一下,就能看到下面这样的结果了:1. JSON的数据格式
a) 按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:
{ "firstName": "Brett" }
b) 可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstancecom" }
c) 可以创建值的数组
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstancecom" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servletscom" }
]}
d) 当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstancecom" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servletscom" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }
]
}
注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。
2. 在 JavaScript 中使用 JSON
JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
21 将 JSON 数据赋值给变量
例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:
var people =
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstancecom" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servletscom" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }
]
}
22 访问数据
将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在JavaScript 中使用下面这样的代码:
peopleprogrammers[0]lastName;
注意,数组索引是从零开始的。
23 修改 JSON 数据
正如访问数据,可以按照同样的方式修改数据:
peoplemusicians[1]lastName = "Rachmaninov";
24 转换回字符串
a) 在 JavaScript 中这种转换也很简单:
String newJSONtext = peopletoJSONString();
b) 可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:
String myObjectInJSON = myObjecttoJSONString();
说明:将转换回的字符串作为Ajax调用的字符串,完成异步传输。
小结:如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。
3. 服务器端的 JSON
31 将 JSON 发给服务器
a) 通过 GET 以名称/值对发送 JSON
在 JSON 数据中会有空格和各种字符,Web 浏览器往往要尝试对其继续编译。要确保这些字符不会在服务器上(或者在将数据发送给服务器的过程中)引起混乱,需要在JavaScript的escape()函数中做如下添加:
var url = "organizePeoplephppeople=" + escape(peopletoJSONString());
requestopen("GET", url, true);
requestonreadystatechange = updatePage;
requestsend(null);
b) 利用 POST 请求发送 JSON 数据
当决定使用 POST 请求将 JSON 数据发送给服务器时,并不需要对代码进行大量更改,如下所示:
var url = "organizePeoplephptimeStamp=" + new Date()getTime();
requestopen("POST", url, true);
requestonreadystatechange = updatePage;
requestsetRequestHeader("Content-Type", "application/x-(>首先,数据都不全了,怎么解析?
json格式是一种标准规则字符串,如果这个规则不完整,那么就是解析不出来。
所以先得保证您的json是完整的,才能解析成功。
是不是json数据太大了?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)