在 appcelerator 上解析 JSON

parsing JSON on appcelerator

我有这样的网络服务:

{"person":{"name account":"Jhon Doe","Image":"image/test","Adress":"New York 43","Recomendations":"40"}}

这就是我想要做的,当我打印 datos 时,我得到了整个 json 但是当我尝试只打印名称或图像时,我没有得到任何东西

var urll = "example.com/example";
var json;
var xhrr = Ti.Network.createHTTPClient({
    onload: function() {
        json = JSON.parse(this.responseText);
        var datos = JSON.stringify(json);
        var medicos = datos;
        Ti.API.info("Json! "+datos);
}
});
xhrr.open('GET', urll);
xhrr.send();

我试过 datos[0].persondatos.person 但什么都没有

我刚刚找到解决方案:

Ti.API.info("Json! "+json.person.Recomendations);

您必须了解包含对象的 JSON 表示 的字符串与对象之间的区别本身。

您的 json 变量包含对象(这就是 JSON.parse(...) 所做的 - 将文本字符串转换为对象)。在对象上,您可以引用您发现的属性。您可以通过两种方式执行此操作:

json.person.Address
json.person['name account']

我建议您尽量避免使用名称不是有效标识符的属性(如两者中的后者),因为这会使它们的使用变得有点困难 - 例如通过不允许点符号。

另一方面,您的 datos 变量包含 json 对象的字符串表示形式(正如 JSON.stringify(...) 所做的那样 - 将对象转换为其字符串表示形式)。这意味着 datos 与 this.responseText 相同(因为您首先 parse 它然后 stringify 它返回)。

所以 JSON.stringify(...) 是使对象“人类可读”的绝妙方法,但您需要该对象来处理数据。

希望这能稍微澄清一下条款;-)

/约翰