【问题标题】:JSON vs Array and is there a way to convert one to the other then back againJSON vs Array,有没有办法将一个转换为另一个,然后再返回
【发布时间】:2011-08-19 05:38:02
【问题描述】:

我在概念上或现实上都知道,即​​使它们本质上是一回事。但是我知道使用 JSON 对象(至少在撰写本文时)。改变给定对象集中的数据并不是最简单的事情。当然我可能是错的,可能有一种简单的方法来完成所有 JSON。这引出了我的实际问题。

我几乎完全使用 JSON 格式的对象。其中大部分我需要经常更新以供以后使用。就我个人而言,我想避免每次都向服务器发送数据和从服务器发送数据来重建 JSON 对象集。所以我想我想知道是否有类似PHP的json_encode,json_decode之类的东西?无论是原生 JavaScript 还是通过 jQuery Lib。如果没有,我怎样才能实现这样的目标,因为我觉得(现在再次)使用数组和 JSON 对象要容易得多(如果我错了,请纠正我)。

【问题讨论】:

  • JSON 和数组在概念或现实上是一回事。 JSON 和对象也不一样。 JSON 是对象数据序列化为字符串,可能表示也可能不表示数组对象。在 JavaScript 中,并非所有对象都是数组,也不是所有对象都可以序列化为 JSON。修改 JavaScript 对象的数据已经很容易了:使用数组只会在数字索引有意义的地方变得更容易。修改 JSON 不是通常的做法:您将对其进行反序列化,然后使用生成的对象。为什么您觉得需要向服务器发送数据或从服务器发送数据来重建您的对象?

标签: javascript jquery arrays json


【解决方案1】:

之所以会出现这个问题,是因为你对 Javascript 和 JSON 都不够了解。

Javascript 数组始终是数值数组。 JavaScript 中没有关联数组,就像您在 PHP 中使用 json_decode(json, true); 获得的那样。当人们谈论 JavaScript 中的关联数组时,他们实际上是在使用 JavaScript 对象及其属性,即,

var my_so_called_array = {};

my_so_called_array['first_item'] = 'hello world';
alert(my_so_called_array['first_item']); // 'hello world'
alert(my_so_called_array.first_item); // also 'hello world'

JSON 的优点之一是其语法是对象文字符号的子集。这意味着 JSON 字符串本身是在 Javascript 中表示“关联数组”的有效代码。 “转换”再简单不过了,只需 eval() 字符串作为代码即可:

var my_data = eval(json_string);

或者,使用jQuery.parseJSON()JSON.parse()

var my_data = jQuery.parseJSON(json_string);

var my_data = JSON.parse(json_string);

人们更喜欢使用jQuery.parseJSON()JSON.parse() 而不是eval() 的原因是因为eval 是邪恶的

  1. 比较慢
  2. 它不检查 JSON 代码的有效性,使其可能受到注入攻击。

以上解释是否回答了您的问题?您可以在 www.json.org 找到有关 JSON 的更多信息。

【讨论】:

    【解决方案2】:

    所有现代浏览器都支持JSON.stringify()JSON.parse()

    如果必须支持旧版浏览器,可以使用jQuery的$.parseJSON()

    【讨论】:

    猜你喜欢
    • 2019-10-09
    • 2020-12-15
    • 2022-10-23
    • 2011-04-24
    • 1970-01-01
    • 2020-08-16
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多