使用 JSON 和 Web API

« 返回首页

JavaScript对象表示法(JSON)广泛用于与 Web 上的应用程序接口(API)进行交互,JSON提供了不同的数据类型,同样App Inventor也支持这些值。

  • JSON 布尔值truefalse 对应 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文本解码为字典 方法解析 响应内容 ,一旦我们有了包含结果的字典,我们就可以访问如下示例中的 titlebody 属性。

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 leveltitle 的关键路径来获取列表中每个帖子的标题(按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 响应状态代码