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

使用对象简谱

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

什么是对象简谱?

对象简谱是一种基于文本的数据格式,遵循爪哇脚本(JavaScript)对象语法,它是道格拉斯·克罗克福特推广的。尽管它非常类似于爪哇脚本对象字面语法,但它可以独立于脚本使用,而且许多编程环境都具有读取(解析)和生成对象简谱的能力。

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

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

对象简谱 结构

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

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

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

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

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

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

对象简谱 数组

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

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

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

其他注意事项

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

对象和文本间的转换

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

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

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

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

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

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

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

布尔型数据的处理

在对象简谱的字符串表达中, 布尔型数据的值是用英文单词“true”和“false”来表示真和假. 我们也可以使用别的方式来表达真和假, 用1 表示真, 0 表示假. 在上面的例子中, 在表达是否”在使用” 时, 它的值是 1.

这是一个用布尔型数据表达是否“在使用”的对象简谱的字符串例子:

[
{
  "书籍列表名称" : "传统文章",
  "在使用" : true
},
{
  "书籍列表名称" : "传统文章2",
  "在使用" : false
}
]

在对这个字符串解析后,得到的对象是:

[
{
  书籍列表名称 : "传统文章",
  在使用 : 真
},
{
  书籍列表名称 : "传统文章2",
  在使用 : 假
}
]

这是一个用数字型数据表达是否“在使用”的对象简谱的字符串例子:

[{
  "书籍列表名称" : "传统文章",
  "在使用" : 1
},
{
  "书籍列表名称" : "传统文章2",
  "在使用" : 0
}]

在对这个字符串解析后,得到的对象是:

[
{
  书籍列表名称 : "传统文章",
  在使用 : 1
},
{
  书籍列表名称 : "传统文章2",
  在使用 : 0
}
]

因为在君土脚本中, 当做条件判断时, 真 和 1 都会被认为是真, 假和0 都会被认为是假. 我们在对象简谱的字符串中使用1和0来表示真和假, 对于代码逻辑判断是没有影响的.

总结

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