JavaScript对象表示法(JSON)广泛用于与 Web 上的应用程序接口(API)进行交互,JSON提供了不同的数据类型,同样App Inventor也支持这些值。
- JSON 布尔值
true
和false
对应 App Inventor真
和假
- JSON 数字(整数和小数)对应 App Inventor
数字
- JSON 字符串 对应 App Inventor
文本
- JSON 数组 对应 App Inventor
列表
- JSON 对象 对应 App Inventor
字典
一个简单的JSON消息例子如下:
{
"name": "张三",
"likes": ["reading", "music"],
"hasTowel": true,
"widgets": 42
}
此 JSON 声明了一个对象(由 {
和 }
表示),key是冒号 (:
) 前的带引号的字符串(例如,"name"
),有不同的值,包括数组(方括号[...]
之间的逗号分隔值)、数字(例如42
)和布尔值(例如true
)。
对于本文档的其余部分,我们将使用 JSONPlaceholder 服务生成示例JSON响应,实际上并不存储任何数据。
本文档中使用的组件
以下示例使用了这些组件:
获取数据
Web客户端组件提供了一个 执行GET请求
方法,当请求完成时Web客户端的 获得文本
事件块将触发,该事件有两个重要参数:
响应代码
: 服务器提供的HTTP状态码,常见的有200
(OK)或201
(已创建),也可能是400
之类的值 (错误请求)、403
(禁止访问)和404
(未找到)。根据你在应用程序中使用的 API,你应该检查状态代码以了解您的请求是否成功。响应内容
:服务器返回的响应内容为文本
,让我们看看如何将其作为JSON进行处理:
Web客户端组件提供了方法将JSON文本解码为字典
获取文本
的内容,比如 响应内容
参数,并将其转换为适当的 App Inventor 类型。根据返回的内容,将JSON文本解码为字典
的输出可能会返回不同的类型,例如列表
或字典
。 App Inventor 提供了诸如是列表?
和是字典?
之类的代码块,如果 API 允许多种类型,你可以使用它们来测试返回值的类型。
示例 - 成功获取
通过相应地设置 Url
属性并调用 执行GET请求
来执行第一次请求:
成功时,获得文本
事件的 响应代码
为 200
,我们可以使用 将JSON文本解码为字典
方法解析 响应内容
,一旦我们有了包含结果的字典,我们就可以访问如下示例中的 title
和 body
属性。
JSON 示例
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
代码块
运行上述块后,标签1 将包含 JSON 中的标题(即"sunt aut facere..."
),标签2 将包含 JSON 中的正文(即"quia et sucipit..."
)。
示例 - 获取失败
如果您请求一个不存在的资源(示例中的 post 101),那么你将得到一个错误:
HTTP 使用错误代码 404
表示服务器找不到资源,我们对此进行测试并向用户报告错误。
示例 - 跟踪响应数据
如果您调用 执行GET请求
并将 Url
设置为 https://jsonplaceholder.typicode.com/posts
,那么您将 获取包含 100 个条目的列表。
如果您想在 列表显示框(ListView) 中显示有关这些项目的一些信息,一种方法是使用for each item
块来遍历列表。
但是,list by walking key path
使这更容易,这个块的工作原理是从给定的对象开始,然后按照以列表
的形式提供给它的后续步骤。在下面的例子中,我们给它 walk all at level
和 title
的关键路径来获取列表中每个帖子的标题(按appearance排序)。这段代码在功能上等同于上面使用 for each
块的代码,但它更简洁。
发送数据
将数据发送到 Web API 进行处理通常涉及两件事。首先,你必须构建需要发送到 API 的消息,API 开发人员通常会提供有关如何使用其 API 的详尽文档;其次,根据操作是否敏感,例如更改或删除数据,你需要提供一些身份验证令牌。
要使用 JSON 的 Web API,您需要使用 App Inventor 的列表和字典类型,例如:
例子
我们可以使用 Web客户端 组件的 PostText
方法将内容发送到基于 JSON 的 Web API。 对于 JSONPlaceholder,帖子应包含 3 个键:"userId"
、"title"
和 "body"
。
成功时,获得文本
中的响应代码
将为 201
,表示“已创建”。
更多信息
要了解有关 HTTP 响应代码的更多信息,请参阅 HTTP 响应状态代码。