1. 主页
  2. 文档
  3. 学习君土脚本
  4. 君土脚本对象入门
  5. 使用象谱

使用象谱

君土脚本对象简谱(象谱/*JSON*/)是用于将结构化数据表示为君土脚本对象的标准格式,通常用于在网站上表示和传输数据(例如从服务器向客户端发送一些数据,因此可以将其显示在网页上)。您会经常遇到它,所以在本文中,我们向您提供使用君土脚本处理象谱的所有工作,包括访问象谱对象中的数据项并编写自己的象谱

什么是 象谱?

象谱 是一种按照君土脚本对象语法的数据格式,这是 道格拉斯·克罗克福特 推广的。虽然它是基于 君土脚本 语法,但它独立于君土脚本,这也是为什么许多程序环境能够读取(解读)和生成 象谱。 

象谱可以作为一个对象或者字符串存在,前者用于解读 象谱 中的数据,后者用于通过网络传输 象谱 数据。 这不是一个大事件——君土脚本 提供一个全局的 可访问的 象谱 对象来对这两种数据进行转换。

一个 象谱 对象可以被储存在它自己的文件中,这基本上就是一个文本文件,扩展名为 .json, 还有 内容类型/*MIME type*/ 用于 application/json.

象谱 结构

我们已经可以推测出 象谱 对象就是基于 君土脚本 对象,而且这几乎是正确的。您可以把 君土脚本 对象原原本本的写入 象谱 数据——字符串,数字,数组,布尔还有其它的字面值对象。这允许您构造出一个对象树,如下:

{
  "书籍列表名称" : "传统文章",
  "类型" : "经典",
  "创建年份" : 2016,
  "国家" : "中国",
  "在使用" : "是",
  "成员" : [
    {
      "书名" : "中庸",
      "阅读次数" : 89,
      "作者" : "子思",
      "摘录" : [
        "凡事豫则立,不豫则废。",
        "上不怨天,下不尤人。",
        "唯天下至诚,为能经纶天下之大经,立天下之大本,知天地之化育。"
      ]
    },
    {
      "书名" : "大学",
      "阅读次数" : 60,
      "作者" : "曾子",
      "摘录" : [
        "物有本末,事有终始,知所先后,则近道矣。",
        "自天子以至于庶人,壹是皆以修身为本。",
        "此谓国不以利为利,以义为利也。"
      ]
    },
    {
      "书名" : "老子",
      "阅读次数" : 30,
      "作者" : "老子",
      "摘录" : [
        "上善若水。水善利万物而不争,处众人之所恶,故几于道。",
        "天之道,损有馀而补不足。人之道,则不然,损不足以奉有馀。孰能有馀以奉天下,唯有道者。",
        "天之道,利而不害;圣人之道,为而不争。",
        "民之从事,常于几成而败之。",
        "将欲取天下而为之,吾见其不得已。"
      ]
    }
  ]
}

如果我们要加载对象进入 君土脚本 程序,以保存为一个名为 传统文章 对象为例,我们使用 . 或 [] 访问对象内的数据(关于. 和 []概念,见 对象基础 )。如:

传统文章.类型
传统文章["在使用"]

为了访问对象中的对象,您只需简单地链式访问(通过属性名和数组索引)。例如,访问 传统文章 对象中的 成员 数组对象的第二个元素的 摘录 数组对象的第三个元素,您可以这样做:

传统文章["成员"][1]["摘录"][2]
  1. 首先我们有变量名 传统文章,储存对象 。
  2. 在对象中我们想访问 成员 属性,所以我们使用 ["成员"]
  3. 成员 包含有对象数组,我们想要访问第二个元素,所以我们使用[1]
  4. 在对象内,我们想访问 摘录 属性,所以我们使用 ["摘录"]
  5. 摘录 属性是一个文章中的数组。我们想要第三个,所以我们使用[2]

象谱 数组

前面我们已经说过,”我们已经可以推测出 象谱 对象就是基于 君土脚本 对象,而且这几乎是正确的“——我们说几乎正确的原因是数组对象也是一种合法的 象谱 对象,例如:

[
    {
      "书名" : "中庸",
      "阅读次数" : 89,
      "作者" : "子思",
      "摘录" : [
        "凡事豫则立,不豫则废。",
        "上不怨天,下不尤人。",
        "唯天下至诚,为能经纶天下之大经,立天下之大本,知天地之化育。"
      ]
    },
    {
      "书名" : "大学",
      "阅读次数" : 60,
      "作者" : "曾子",
      "摘录" : [
        "物有本末,事有终始,知所先后,则近道矣。",
        "自天子以至于庶人,壹是皆以修身为本。",
        "此谓国不以利为利,以义为利也。"
      ]
    }
]

上面是完全合法的 象谱。您只需要通过数组索引就可以访问数组元素,如[0]["摘录"][0]。

其他注意事项

  • 象谱 是一种纯数据格式,它只包含属性,没有方法。
  • 象谱要求在字符串和属性名称周围使用双引号。 单引号无效。
  • 甚至一个错位的逗号或分号就可以导致  象谱 文件出错。您应该小心的检查您想使用的数据(虽然计算机生成的 象谱 很少出错,只要生成程序正常工作)。您可以通过像 JSONLint 的应用程序来检验 象谱。
  • 象谱 可以将任何标准合法的 象谱 数据格式化保存,不只是数组和对象。比如,一个单一的字符串或者数字可以是合法的 象谱 对象。虽然不是特别有用处……
  • 与 君土脚本 代码中对象属性可以不加引号不同,象谱 中只有带引号的字符串可以用作属性。

对象和文本间的转换

当我们接收到一些 字符串作为 象谱 数据,然后我们想要将它转换为对象。当我们想要发送 象谱 数据作为信息,我们将需要转换它为字符串,我们经常需要正确的转换数据,幸运的是,这两个问题在网络环境中是那么普遍以至于运行系统拥有一个内建的 象谱,包含以下两个方法。

  • 析/*parse*/(): 以文本字符串形式接受 象谱 对象作为参数,并返回相应的对象。
  • 串/*stringify*/(): 接收一个对象作为参数,返回一个对应的 象谱 字符串。

尝试将下面的代码在您的君土集成开发环境运行, 来看看会发生什么:

  定 象谱0 = { "名": "小明", "年龄": 15 };
  控制台.日志(象谱0);
  定 字串0 = 象谱.串(象谱0);
  控制台.日志(字串0);

这儿我们创建了一个君土脚本 对象,然后检查了它包含了什么,然后用串() 将它转换成象谱字符串,最后保存返回值作为变量。然后再一次检查。

正如您所想, 析() 做相反的事情,我们使用 析() 来将字串0转换成为 君土脚本 对象。

  定 人 = 象谱.析(字串0);
  控制台.日志(人.名); // 打印 "小明"
  控制台.日志(人.年龄);  // 打印 15

总结

在这个文章中,我们给了您一个简单的示例来在自己的程序中使用 象谱,包括创建和处理 象谱,还有如何访问 象谱 内的数据。