全球FlexSim系统仿真中文论坛
标题: 【官网翻译】如何在Flexsim中读取或写入json数据 [打印本页]
作者: 小太阳sun 时间: 2017-10-10 18:07
标题: 【官网翻译】如何在Flexsim中读取或写入json数据
原帖地址:https://answers.flexsim.com/questions/27069/how-to-read-or-write-json-data-in-flexsim.html |
Ben Wilson
问题描述:如何在Flexsim中读取或写入json数据?
例如:{ "destination_addresses" : ["San Francisco, CA, USA" ], "origin_addresses" : ["Vancouver, BC, Canada" ], "rows" : [ {"elements" : [ { "distance" : { "text" :"1,530 km", "value" : 1529516 }, "duration" : {"text" : "14 hours 46 mins", "value" : 53135 },"status" : "OK" } ] } ], "status" :"OK" }
如何读取destination值?如何更新duration文本?
回答:
这个答案的灵感来自于@phil.bobo的答案,但尝试掩盖一些不足 - 即更强大的JSON解析处理字符串中的双引号,空对象和数组,以及可能还有一些其他特殊情况,这也是一种从树回到JSON格式的字符串的“翻译”方式,为了更好的测试它,我还添加了一个getter / setter,允许您使用Javascript样式语法来设置和查询保存在FlexSim树中的JSON数据。
附加的模型(由FlexSim 16.1.2创建)具有以下主要用户命令:
jsonToTree - 将有效的JSON字符串转换为FlexSim的树。
treeToJSON - 将FlexSim树转换为JSON格式的字符串。
jsonGetSet - 一种使用JavaScript样式语法(点语法和索引数组)获取/设置保存在FlexSim树中的JSON值的方法。
每个用户命令在代码中都有注释。
除了3个主要的用户命令外,还有一些辅助用户命令被主要用户使用,包括:
formatJSON_num - 帮助格式化一个数字,以便从树到JSON文本的高效翻译。
formatJSON_str - 用于通过(un)转义可以在字符串中使用的JSON保留字符,在树和JSON格式的文本之间翻译字符串。
trim- 从字符串的开头和结尾移除空格。
请在下面评论任何问题,建议或错误报告。我会用更多的人使用可能出现的任何需要的修复或改进来更新此答案。让我们在此基础上,使其成为FlexSim + JSON集成的命令库。
注意:我希望FlexSim有一个布尔型节点类型,但是在这个时候它不是。没有布尔treenode数据类型,处理true和false(和null)值有点棘手。我创建的命令将True,false和null值作为字符串保存在FlexSim树中,但子节点表示它们实际上是JSON特殊值。或者我考虑使用不同的treenode数据类型来表示true,false和null。例如,DATATYPE_COUPLING可能表示为真,DATATYPE_SIMPLE为false,DATATYPE_BUNDLE为空。这可能看起来在某些方面更整洁,但是第一次看到的人想了解JSON数据的树形表示方式将会变得困难,所以相对于的正常字符串,我选择使用带有子节点的DATATYPE_STRING来表示JSON值。
更新日志:
20160901 - 修复了一个错误,检测字符串中的引号和反斜杠,更新了一些附加测试得例子。附件 samplejson.txt 内容
{
"test_invalid":test,
"test_empty":,
"string_empty":"",
"string_basic":"Here we go",
"string_doubleBackslash":"test string\\\\",
"string_backslashQuote":"test string\\\"",
"string_doubleQuotes":"checking \"\\validity\\\" of a \"quoted\" string",
"string_newline":"line one\n\nline three",
"number_zero":0.0000,
"number_integer":123,
"number_decimal":-123.456,
"number_e":12345e6,
"object_empty": {},
"object_comprehensive": {"string":"value1", "integer":2, "decimal":3.1415, "special":null, "array":["test",1,true], "object":{"subobjattrib":false}},
"array_empty": [],
"array_strings": ["a", "b", "c"],
"array_numeric": [0, 1, 2],
"array_special": [true, false, null],
"array_object1":[{"firstObject":true},{"secondObject":"yes"},{}],
"array_object2": [
{
"test1": true,
"test2": false,
"test3": null,
"elements": [{
"distance": {
"text": "1,530 km",
"value": 1529516
},
"duration": {
"text": "14 hours 46 mins",
"value": 53135
},
"status": "OK"
}]
},
{},
{
"hi": "there"
}
],
"array_mixed":[
123,
"fourfivesix",
{"myobject":{"human":"being"}},
[101,102,103],
true,
false,
null
]
}
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) |
Powered by Discuz! X3.3 |