Javascript 如何从JSON中获取价值?

Javascript 如何从JSON中获取价值?,javascript,jquery,json,Javascript,Jquery,Json,嗯。。我有以下json值: var form = { lat: event.row['lat'].value, lon: event.row['lon'].value, } Android.openForm( $.toJSON(form) ); 如何从lat和long中获取值 openForm: function( json ){ alert(json[lat]); //$('#lat').val(json.lat); } 为什么不让openForm直接接收对象而不是jso

嗯。。我有以下json值:

var form = {
lat: event.row['lat'].value,
lon: event.row['lon'].value,
}

Android.openForm( $.toJSON(form) );
如何从lat和long中获取值

openForm: function( json ){
    alert(json[lat]);
    //$('#lat').val(json.lat);
}

为什么不让openForm直接接收对象而不是json序列化

openForm(form){
    var json = $.toJSON(form);
    alert(form.lat);
}
试试这个

openForm: function( json ){

    var lat = json.lat;//or json["lat"]
    var lon = json.lon;//or json["lon"]

}

顺便说一下,变量
form
已经是一个格式良好的json,您不必为了使用它而将其转换为json。

如果
$.toJSON
是一个类似于
json.stringify
的方法,那么您已经将数据序列化为json文本,因此它的值不再通过属性可用

您需要首先解析它

openForm: function( json ){

     // UPDATED to use the JSON plugin you've loaded
    var parsed = $.evalJSON( json ); 

    alert( parsed[lat] );
}
我假设原始的
表单
变量无法从您试图检索值的位置访问,否则您可能不会首先序列化它

如果原始的
表单
数据处于相同的执行环境中,并且可以直接从函数中访问,则应该这样做,而不是序列化


什么是JSON,我们为什么要使用它? 对于那些不了解JSON的含义的人来说,它是一种基于文本的序列化格式,用于在无法自然共享数据的环境之间传输数据

序列化只是一种标准化格式,它从一个环境的本机数据结构中“字符串化”,然后解析为另一个环境的本机数据结构

我假设
toJSON
是“stringify”函数,而
openForm
是JSON数据传输到的单独环境


如果这些假设是正确的,则需要将JSON解析到新环境中,然后才能轻松访问其值。

如果
表单
的结果是这样的

var form = {
lat: "somevalue",
lon: "somevalue"
};
您可以通过点属性访问变量
表单
中的数据

form.lat
form.lon

$。toJSON(form)
将对象转换为字符串,我认为您希望传递对象,所以只需将其丢弃:


Android.openForm(form)

没有意识到我的队友正在使用插件。。。

我应该先问他…@@@ 对不起,奈

var thing = {plugin: 'jquery-json', version: 2.3};

var encoded = $.toJSON( thing );
// '{"plugin":"jquery-json","version":2.3}'
var name = $.evalJSON( encoded ).plugin;
// "jquery-json"
var version = $.evalJSON(encoded).version;
// 2.3


您只需要在
lat
周围加引号,此时它被解析为一个变量,应该是一个字符串:
alert(json['lat'])警报(json);显示json中的所有值。但是我不知道如何访问像lat和lonI这样的单个值,假设
form
变量在
openForm
函数中不可用,并且您需要JSON序列化来传输数据,因为JSON就是用于此的。是这样吗?但我将表单传递给函数并将其命名为json..:|<代码>$.toJON
谁是Jon?;)或者这是新的Java对象表示法?;)如何从
openForm
函数知道
form
是否可用?如果(form==undefined)return??您的答案可能提供了一个有效的替代方案(假设调用函数的范围内有
form
),但严重误用了术语JSON。关于如何或是什么形成变量几乎没有上下文。但是给出了这个例子,OP似乎正在构建一个js变量并将其传递给一个方法。@ScruffyTheJanitor:是的。这是一个JavaScript对象文本,它是经过评估的JavaScript环境的一部分。JSON是一种可能被转换成JavaScript(或其他语言)的文本,但在此之前,它是不同的。有一些JSON数据不会作为有效的JavaScript代码进行计算的示例。两者之间的联系是,JSON表示法基于JS中的对象文字表示法。到目前为止,谁对第一个正确答案投了反对票?jQuery不够?谢谢你的更新。我希望我能不止一次地投你赞成票。@阿尔瓦罗·G·维卡里奥:我希望你也能,因为我刚刚又收到了一张反对票。啊!啊,我看到一些14岁的孩子在为我的正确答案投票。@RightSaidFred-多么奇怪-最好的答案得分最低。我会在6小时内+1这个,当你不再被封顶的时候。顺便说一句,你知道这个插件的特点是什么吗?$.toJSON和$.evalJSON如何比本机JSON.stringify和jQuery的本机$.parseJSON更好?如果
JSON
包含一个JSON字符串(顾名思义),您就不能这样做:您需要先解析它。而且
form
不是格式良好的JSON;它甚至不是一个字符串。看看OP的问题,它看起来像一个格式良好的json。这是因为您可能会混淆。json本身就是一个
JavaScript
对象。关键是我们不必解析这个对象来访问它的属性。shankarsangli:JSON是文本,如果您愿意,它可以解析为JavaScript对象。在此之前,它(假设是JavaScript环境)是一个字符串。我认为这就是发生的情况,但您不应该每次访问属性时都使用
$.evalJSON
。您应该处理它一次,并存储结果。举个例子。我将更新它以使用插件中的方法@황현정 - 您可以更新原始问题并在那里添加信息。这是一个很好的信息,但并不适合作为答案。