|
|
[table=98%]
[tr][td][align=left][font=黑体][size=14px]原帖地址[/size][/font][font=宋体][size=14px]:[/size][/font][font=宋体][size=14px]https://answers.flexsim.com/questions/27069/how-to-read-or-write-json-data-in-flexsim.html[/size][/font][/align][/td][/tr]
[/table][align=left][font=宋体]原作者:[/font] [url=https://answers.flexsim.com/users/892/qiu.x.html][color=#ff0000]qiuxiaohong[/color][/url] [/align][font="][size=10.5pt][color=#e6353a] [/color][url=https://answers.flexsim.com/users/9/benjaminwilson.html][color=#ff0000]Ben Wilson[/color][/url][/size][/font]
[font="][size=10.5pt]问题描述:[/size][/font][font=宋体]如何在[/font]Flexsim[font=宋体]中读取或写入[/font]json[font=宋体]数据?[/font]
[align=left][font=Helvetica, sans-serif][url=https://answers.flexsim.com/users/892/qiu.x.html][color=#ff0000]qiu xiaohong[/color][/url][color=#ff0000]:[/color][/font][/align][align=left][font=宋体]例如:[/font][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]{ "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" }[/size][/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt] [/size][/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=宋体][size=11pt]如何读取[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]destination[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]值?如何更新[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]duration[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]文本?[/size][/font][/color][color=rgb(51, 51, 51)][/color][/align][align=left][color=rgb(51, 51, 51)][font=宋体][size=11pt]
[/size][/font][/color][/align][align=left][color=rgb(51, 51, 51)][font=宋体][size=11pt]回答[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]:[/size][/font][/color] [/align][align=left][font=宋体][size=11pt][font=Helvetica, sans-serif][size=14px][font=Helvetica, sans-serif][size=14px][url=https://answers.flexsim.com/users/9/benjaminwilson.html][color=#ff0000]Ben Wilson[/color][/url][/size][/font][color=#ff0000]:[/color][/size][/font][/size][/font][/align][align=left][color=rgb(51, 51, 51)][font=宋体][size=11pt]这个答案的灵感来自于[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]@phil.bobo[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]的答案,但尝试掩盖一些不足[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt] - [/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]即更强大的[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]JSON[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]解析处理字符串中的双引号,空对象和数组,以及可能还有一些其他特殊情况,这也是一种从树回到[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]JSON[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]格式的字符串的“翻译”方式,为了更好的测试它,我还添加了一个[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]getter / setter[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt],允许您使用[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]Javascript[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]样式语法来设置和查询保存在[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]FlexSim[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]树中的[/size][/font][/color][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt]JSON[/size][/font][/color][color=rgb(51, 51, 51)][font=宋体][size=11pt]数据。[/size][/font][/color][color=rgb(51, 51, 51)][/color][/align][align=left][color=rgb(51, 51, 51)][font=Helvetica, sans-serif][size=11pt] [/size][/font][/color][/align][align=left][font=宋体]附加的模型(由[/font]FlexSim 16.1.2[font=宋体]创建)具有以下主要用户命令:[/font][/align][align=left]jsonToTree - [font=宋体]将有效的[/font]JSON[font=宋体]字符串转换为[/font]FlexSim[font=宋体]的树。[/font][/align][align=left]treeToJSON - [font=宋体]将[/font]FlexSim[font=宋体]树转换为[/font]JSON[font=宋体]格式的字符串。[/font][/align][align=left]jsonGetSet - [font=宋体]一种使用[/font]JavaScript[font=宋体]样式语法(点语法和索引数组)获取[/font]/[font=宋体]设置保存在[/font]FlexSim[font=宋体]树中的[/font]JSON[font=宋体]值的方法。[/font][/align][align=left][font=宋体]每个用户命令在代码中都有注释。[/font][/align][align=left][font=宋体]除了[/font]3[font=宋体]个主要的用户命令外,还有一些辅助用户命令被主要用户使用,包括:[/font][/align][align=left]formatJSON_num - [font=宋体]帮助格式化一个数字,以便从树到[/font]JSON[font=宋体]文本的高效翻译。[/font][/align][align=left]formatJSON_str - [font=宋体]用于通过([/font]un[font=宋体])转义可以在字符串中使用的[/font]JSON[font=宋体]保留字符,在树和[/font]JSON[font=宋体]格式的文本之间翻译字符串。[/font][/align][align=left]trim- [font=宋体]从字符串的开头和结尾移除空格。[/font][/align][align=left][font=宋体]请在下面评论任何问题,建议或错误报告。我会用更多的人使用可能出现的任何需要的修复或改进来更新此答案。让我们在此基础上,使其成为[/font]FlexSim + JSON[font=宋体]集成的命令库。[/font][/align][align=left][font=宋体]注意:我希望[/font]FlexSim[font=宋体]有一个布尔型节点类型,但是在这个时候它不是。没有布尔[/font]treenode[font=宋体]数据类型,处理[/font]true[font=宋体]和[/font]false[font=宋体](和[/font]null[font=宋体])值有点棘手。我创建的命令将[/font]True[font=宋体],[/font]false[font=宋体]和[/font]null[font=宋体]值作为字符串保存在[/font]FlexSim[font=宋体]树中,但子节点表示它们实际上是[/font]JSON[font=宋体]特殊值。或者我考虑使用不同的[/font]treenode[font=宋体]数据类型来表示[/font]true[font=宋体],[/font]false[font=宋体]和[/font]null[font=宋体]。例如,[/font]DATATYPE_COUPLING[font=宋体]可能表示为真,[/font]DATATYPE_SIMPLE[font=宋体]为[/font]false[font=宋体],[/font]DATATYPE_BUNDLE[font=宋体]为空。这可能看起来在某些方面更整洁,但是第一次看到的人想了解[/font]JSON[font=宋体]数据的树形表示方式将会变得困难,所以[/font][font=宋体]相对于的正常字符串,[/font][font=宋体]我选择使用带有子节点的[/font]DATATYPE_STRING[font=宋体]来表示[/font]JSON[font=宋体]值。[/font][/align][align=left][font=宋体]更新日志:[/font][/align][align=left][color=rgb(51, 51, 51)][/color][/align][align=left]20160901 - [font=宋体]修复了一个错误,检测字符串中的引号和反斜杠,更新了一些附加测试得例子。[/font]附件 samplejson.txt 内容[/align]{
"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
]
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|