toml与json联系对比

前言

本文简单介绍toml;并且和json转化做对比,以及我对toml设计的理解。

参考:

TOML: 简体中文 v1.0.0

json和toml转化工具

在线JSON转toml-toml转JSON - bejson在线工具

正文

数组

说白了,就是一个变量名,有多个变量的值。值的类型,可以相同,可以不同。

integers = [ 1, 2, 3 ]
colors = [ "红", "黄", "绿" ]
nested_array_of_ints = [ [ 1, 2 ], [3, 4, 5] ]
nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ]
string_array = [ "所有的", '字符串', """是相同的""", '''类型''' ]

# 允许混合类型的数组
numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]
contributors = [
  "Foo Bar <foo@example.com>",
  { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" }
]

对应josn

{
  "integers": [ 1,2,3 ],
  "colors": ["红",黄","绿"],
  "nested_array_of_ints": [[1,2],[3,4,5]],
  "nested_mixed_array": [[1,2],["a","b","c"]],
  "string_array": ["所有的","字符串","是相同的","类型"],
  "numbers": [0.1,0.2,0.5,1,2,5],
  "contributors": [
    "Foo Bar <foo@example.com>",
    {
      "name": "Baz Qux",
      "email": "bazqux@example.com",
      "url": "https://example.com/bazqux"
    }
  ]
}

在json中对应“对象”;要注意的是json中,对象有的有名字,有的没有名字。

toml方括号,就说明用的是“表”。也就是json中的对象。

创建表的方法:

#创建了sites对象,内容有site1
[sites]
site1 = "www.runoob.com"

#创建了“嵌套”对象
[dog]
[dog."tater.man"]
[dog."tater.man".type]
name = "pug"

#等价于上面
dog."tater.man".type.name = "pug"

例子:

{
    "name":"runoob",
    "alexa":10000,
    "sites": {
        "site1":"www.runoob.com",
        "site2":"m.runoob.com",
        "site3":"c.runoob.com"
    }
}


转成toml
name = "runoob"
alexa = 10000
[sites]
site1 = "www.runoob.com"
site2 = "m.runoob.com"
site3 = "c.runoob.com"

嵌套

{
  "dog": {
    "tater": {
      "type": {
        "name": "pug"
      }
    }
  }
}


转成toml
[dog]
[dog.tater]
[dog.tater.type]
name = "pug"
#等价于上面——没有括号
dog.tater.type.name = "pug"

demo

[merter1.VoltageSurge]
 STimeStamp= ["1","2","3"]
 ETimeStamp= ["4","5","6"]
 
[merter1.VoltageDip]
 STimeStamp= ["1","2","3"]
 ETimeStamp= ["1","2","3"]

[merter2.VoltageSurge]
 STimeStamp= ["1","2","3"]
 ETimeStamp= ["1","2","3"]
[merter2.VoltageDip]
 STimeStamp= ["1","2","3"]
 ETimeStamp= ["1","2","3"]

const auto data = toml::parse("C:/Users/45428/Desktop/test.toml");
	for (const auto& kv : data.as_table()) {
		const toml::value& value = kv.second;
		// 遍历子表
		const toml::table& sub_table = value.as_table();
		for (const auto& sub_kv : sub_table) {
			const toml::key& sub_key = sub_kv.first;
			const toml::value& sub_value = sub_kv.second;

			const auto STimeStamp = toml::find<std::vector<string>>(sub_value, "STimeStamp");
			const auto ETimeStamp = toml::find<std::vector<string>>(sub_value, "ETimeStamp");
		}
	}

内联表

和“表”一样。

他的存在就是让文件变得更加紧凑相对于“表”来说。

既然是为了更紧凑,就不允许他换行。

你要内联表,就得在大括号里定义完,不允许再起一行后面增加。或者用内联表去增加一般的表。

#表
[name]
first = "Tom"
last = "Preston-Werner"
[point]
x = 1
y = 2
[animal]
type.name = "pug"

#内联表——更紧凑——上下都一样
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }

表数组

就是表里嵌套数组;

对应的json就是对象嵌套数组。

【【数组名字】】

例子:

{
  "products": [#数组products——两个元素
    {
      "name": "Hammer",
      "sku": 738594937
    },
    {
      "name": "Nail",
      "sku": 284758393
    }
  ],
  "products1": [#数组products1——一个元素
    {
      "name": "Hammer",
      "sku": 738594937
    }
  ]
}

#数组products
[[products]]
name = "Hammer"
sku = 738594937
[[products]]
name = "Nail"
sku = 284758393

#数组products1
[[products1]]
name = "Hammer"
sku = 738594937

嵌套

[[fruits]]
name = "apple"

[fruits.physical]  # 子表
color = "red"
shape = "round"

[[fruits.varieties]]  # 嵌套表数组
name = "red delicious"

[[fruits.varieties]]
name = "granny smith"

[[fruits]]
name = "banana"

[[fruits.varieties]]
name = "plantain"


{
  "fruits": [
    {
      "name": "apple",
      "physical": {
        "color": "red",
        "shape": "round"
      },
      "varieties": [
        {
          "name": "red delicious"
        },
        {
          "name": "granny smith"
        }
      ]
    },
    {
      "name": "banana",
      "varieties": [
        {
          "name": "plantain"
        }
      ]
    }
  ]
}

表和表数组的区别

【对象名】:toml的表,json的对象

{
  "a": {}
}

【【对象名】】:toml的表数组,json的数组里放对象

{
  "a": [
    {}
  ]
}

嵌套:

【a.b】a对象嵌套b对象

{
  "a": {
    "b": {}
  }
}

【【a.b】】a数组嵌套b对象

[[a.b]]

{
  "a": {
    "b": [
      {}
    ]
  }
}

嵌套的都是对象

相关推荐

  1. tomljson联系对比

    2024-05-10 08:50:03       35 阅读
  2. 发送json 发送对象

    2024-05-10 08:50:03       25 阅读
  3. json.loads()json.dumps()区别

    2024-05-10 08:50:03       34 阅读
  4. 接口请求对象json中字段大小写的处理

    2024-05-10 08:50:03       28 阅读
  5. 保存Json对象到数据库

    2024-05-10 08:50:03       53 阅读
  6. vlan和vxlan的区别联系,以及他们对应的设备

    2024-05-10 08:50:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 08:50:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 08:50:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 08:50:03       87 阅读
  4. Python语言-面向对象

    2024-05-10 08:50:03       96 阅读

热门阅读

  1. SVG在HTML中的魔法:解锁矢量图形的奥秘

    2024-05-10 08:50:03       35 阅读
  2. 计算机视觉(CV)(Computer Vision)

    2024-05-10 08:50:03       37 阅读
  3. 设计模式——中介者模式(Mediator)

    2024-05-10 08:50:03       34 阅读
  4. MySQL商城数据表(80-84)

    2024-05-10 08:50:03       32 阅读
  5. [CAM_REQ_MGR_EVENT_MAX]高通6225平台相机老化异常重启

    2024-05-10 08:50:03       30 阅读
  6. vue的组件库

    2024-05-10 08:50:03       34 阅读
  7. 图解JVM出现的参数

    2024-05-10 08:50:03       46 阅读