JSON字符串可以用于什么?

3
据我理解,JSON字符串是一种打包信息以便传输的方式,就像XML一样。这也是在Stack Exchange问题中广泛流传的,例如:什么是JSON,为什么要使用它? 然而,我玩的游戏最近出现了一个机器人,它将JSON文件作为执行操作的“脚本”。通过这种方式,机器人的用户能够自定义机器人应执行的操作。
这似乎违反了我对JSON及其可完成的任务的心理模型。我目前的怀疑是,与其将这些“脚本”JSON文件用作要发送的信息包,不如由机器人内部处理它们,然后将我们的“脚本”转换为实际操作。
如果我对JSON的理解有误,请给我指点。

1
这只是一种格式化数据的方式,可以轻松传输,类似于一种电线格式。除此之外,没有任何特别之处。仅仅因为游戏能够接收该数据并对其进行处理,并不意味着它很特别。 - Jeff Mercado
1个回答

2

JSON只是一种结构,字面上它是“JavaScript对象表示法”,http://json.org/

内部由机器人处理

基本上就是这样。json字符串被解析成一个对象,根据该对象的值,机器人做出反应。其中没有涉及脚本编写。但是,有可能某些值是字符串中的脚本,可以使用JavaScript中的eval来执行。

然而,我怀疑并不是以这种方式使用eval,机器人只是读取键值对作为指令,例如moveright:5英尺

这里是一个非常快速的例子,在json中接受预期的命令,然后在某种过程中执行它们。实现很基础,只是概念证明。

var json = '{ "actions": [ { "speak": "hello world" }, { "color" : "red" } ]}';
var obj = JSON.parse(json);

var i = 0;
var bot = document.querySelector("#bot");

var actions = {
 speak : function(text){ bot.innerText = text; },
 color : function(c){ bot.style.color = c; }
};

function act(action){
  for(var key in action){
      var value = action[key];
      actions[key](value);
  }
  if(i <= obj.actions.length) 
    setTimeout(function(){
        act(obj.actions[i++]);
    },500);
}

setTimeout(function(){
  act(obj.actions[i++]);
},500);
<div id="bot">:)</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接