JUCE类库JSON类详解

JSON类似于XML,同样基于文本结构,但没有节点的概念(代之以数组的形式来体现嵌套结构)。JSON的执行效率比XML更高,其基本格式为:

  • 开始于“{”,结束于“}”。每个属性名称和属性值之间用“:”来分隔,属性之间用“,”分隔
  • JSON的属性值可以是数组,数组开始于“[”,结束于“]”,数组元素之间用“,”分隔
  • 数组中的元素无属性名称,只有属性值
  • 数组中的元素可以是另一个完整的JSON
  • 属性值中的字符串由引号包裹,数字、true、false等数据则无需

JUCE类库的模块清单文件juce_module_info就采用了JSON格式,该文件的内容如下(部分):

{
  "id":     "juce_audio_basics",
  "name":   "JUCE audio and midi data classes",
  "version": "2.0.21",

  // 数组中嵌套JSON
  "compile": [ { "file": "juce_audio_basics.cpp", "target": "! xcode" },
               { "file": "juce_audio_basics.mm",  "target": "xcode" } ],  

  // 属性值是一个数组
  "browse": [ "buffer/*", "midi/*", "effect/*", "source/*", "synthesiser/*" ]  
}
JSON文档的格式与内容

JUCE类库的JSON类用于读写JSON文档,其所有成员函数全是static静态的,使用时无需创建对象,直接调用即可。该类可将JSON文档或JSON格式的字符串解析为var对象,并可将var对象转换为JSON格式的文本。

JSON类的静态函数
 parse () 基于给出的字符串、文件或输入流对象解析JSON,解析结果为var对象
 toString () 将给出的var对象转换为字符串对象,var对象的内容须符合JSON格式
 writeToStream () 将某个具有JSON格式的var对象写入给出的输出流对象中

注意:ValueTree可以与XmlElement互相转换,但无法和JSON进行任何转换,因为两者的数据格式有本质的差异。