首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象序列化/反序列化为/从TOIT语言上的JSON

将对象序列化/反序列化为/从TOIT语言上的JSON
EN

Stack Overflow用户
提问于 2021-05-02 10:01:18
回答 2查看 87关注 0票数 1

我有几个关于使用json的问题。我可以看到附加的库lib_v1.0.2中有相应的模块,但是示例没有使用它们。是否可以给出两个简单的示例:将对象序列化为json字符串和反序列化json为同一个对象:例如,通过constructor.json jsonString创建对象。如果可能的话,除了序列化/反序列化普通字段:字符串、int、bool之外,还解释如何序列化/反序列化&散列映射(& lists,如果对象包含它们)。

提前谢谢你,MK

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-02 15:38:16

目前,JSON库只支持硬编码的类型列表:

代码语言:javascript
复制
  encode obj:
    if obj is string: encode_string_ obj
    else if obj is num: encode_number_ obj
    else if identical obj true: encode_true_
    else if identical obj false: encode_false_
    else if identical obj null: encode_null_
    else if obj is Map: encode_map_ obj
    else if obj is List: encode_list_ obj
    else: throw "INVALID_JSON_OBJECT"

这意味着它不能序列化/反序列化其他类型(用户定义的)对象。

我已经在这里提交了一个特性请求:https://github.com/toitware/public/issues/6

票数 2
EN

Stack Overflow用户

发布于 2021-05-03 06:57:45

我还没有测试复杂json对象的反序列化,但是显然TOIT支持容器的序列化/反序列化,包括嵌套的容器。例如,一个列表:

代码语言:javascript
复制
import encoding.json as json

main :
  list := [1,2,"covid-19",25,[11,12,"toit",13,14],{"fortran":[77,90]}]
  a1 := list[0]
  log("a1->$a1")
  a2 := list[1]
  log("a2->$a2")
  a3 := list[2]
  log("a3->$a3")
  a4 := list[3]
  log("a4->$a4")
  a5 := list[4]
  log("a5->$a5")
  a6 := list[5]
  log("a5->$a6")

  jsonObjList := json.encode list
  log("jsonObjList($list)")
  
  listClone := json.decode jsonObjList
  log("listClone->($list)")

  aa1 := listClone[0]
  log("aa1->$aa1")
  aa2 := listClone[1]
  log("aa2->$aa2")
  aa3 := listClone[2]
  log("aa3->$aa3")
  aa4 := listClone[3]
  log("aa4->$aa4")
  aa5 := listClone[4]
  log("aa5->$aa5")
  aa6 := listClone[5]
  log("aa5->$aa6")

  jsonObjListText := jsonObjList.to_string
  log("jsonObjListText-> $jsonObjListText")
  
  listClone2 := json.decode jsonObjListText.to_byte_array
  log("listClone2->($listClone2)")

  aaa1 := listClone2[0]
  log("aaa1->$aaa1")
  aaa2 := listClone2[1]
  log("aaa2->$aaa2")
  aaa3 := listClone2[2]
  log("aaa3->$aaa3")
  aaa4 := listClone2[3]
  log("aaa4->$aaa4")
  aaa5 := listClone2[4]
  log("aaa5->$aaa5")
  aaa6 := listClone2[5]
  log("aaa6->$aaa6")

输出:

代码语言:javascript
复制
michael_k@michaelk:~/toit_apps/json$ toit execute test_json.toit
a1->1
a2->2
a3->covid-19
a4->25
a5->[11, 12, toit, 13, 14]
a5->{fortran: [77, 90]}
jsonObjList([1, 2, covid-19, 25, [11, 12, toit, 13, 14], {fortran: [77, 90]}])
listClone->([1, 2, covid-19, 25, [11, 12, toit, 13, 14], {fortran: [77, 90]}])
aa1->1
aa2->2
aa3->covid-19
aa4->25
aa5->[11, 12, toit, 13, 14]
aa5->{fortran: [77, 90]}
jsonObjListText-> [1,2,"covid-19",25,[11,12,"toit",13,14],{"fortran":[77,90]}]
listClone2->([1, 2, covid-19, 25, [11, 12, toit, 13, 14], {fortran: [77, 90]}])
aaa1->1
aaa2->2
aaa3->covid-19
aaa4->25
aaa5->[11, 12, toit, 13, 14]
aaa6->{fortran: [77, 90]}
michael_k@michaelk:~/toit_apps/json$ 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67355048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档