JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

比较标准的写法:

  1. var json = '{"a":"1", "b":"2"}';
  2. var data = eval('('+ json +')');
  3. alert(data.a);
  4. alert(data['a']);

这样两种方式都可以取到json中的值。

但是当key的值为数字时,只能使用类似数组下表的访问方式取值。

  1. var json = '{"0":"a", "1":"b", "length":2}';
  2. var data = eval('(' + json + ')');
  3. //alert(data.0);    //报错,此方式不可用
  4. alert(data['0']);
  5. alert(data[0]);    //注意此写法与数组用下标访问是相同的
  6. alert(data.length)  //貌似数组的长度

1.使用json时,通常都使用第一种方式,且key一般应使用合法的变量名(字母或下划线开头的包括字母、下划线和数字的字符串)

2.对象的两种访问方式:data.key和data[’key’]各自有自己的应用场景,一般情况使用data.key即可,也比较直观(它符合其它高级语言中访问对象中属性的方式);

当key为一个变量时,并且使用在循环中,用data['key']这种方式。

  1. for(var i=0; i < 10; i++) {
  2. s += data['key' + i];  //循环调用,可简化代码
  3. }

3.第三种采用数字做key的方式,虽然不推荐,但也是有其应用价值的;

如当建立一个与数据库中id一一对应的map对象的时候,

可直接用id的数值做key,虽然你可以给它加上一个字母前缀来让它符合合法的变量名的标准,

并让它的数据能通过data.key的方式访问,

但如果数据量非常大的话,

为每个id都加一个前缀,+字符连接运算也是要消耗性能的,

特别是在很少需要采用data.key方式去访问属性的情况下,

那么可以抛弃此调用方式,直接用数字做key也未尝不可,

除了key名称不符合合法变量名的标准之外,似乎并没有其它损失;

JSON的key值为数字时如何使用的更多相关文章

  1. Gson如何解析key值是数字的json数据

    1.使用注解@SerializedName来解决这个问题 2.比如有如下json数据:(key值是数字"1112") { "1112": "抖音&qu ...

  2. 解决js array的key不为数字时获取长度的问题

    最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...

  3. js json按key值排序

    最近有个需求需要把json按key值进行排序,可是js并没有直接的函数可以对json进行排序的这么办呢? 然后想到了一个间接的方法来实现: 1.将json中的key值取出,存在一个数组中,然后对这个数 ...

  4. Python解析非标准JSON(Key值非字符串)

    采集数据的时候经常碰到一些JSON数据的Key值不是字符串,这些数据在JavaScript的上下文中是可以解析的,但在Python中,没有该部分数据的上下文,无法采用json.loads(JSON)的 ...

  5. Json不知道key值情况下获取第一个键值对

    JObject jsonData = new JObject(); jsonData.Add("1", "1"); jsonData.Add("2&q ...

  6. js 递归修改json无限级key值

    var tree = [ { name: 'node1' }, { name: 'node2', children: [{ name: 'node-2-1' }, { name: 'node2-2' ...

  7. Java代码中获取Json的key值

    测试json字符串: {"access_token":"hkbQl5o_l67dZ7_vJRATKBwTLk9Yj5QyMuOJThAr8Baj0xWf4wxW1p4ym ...

  8. json 将key值以字符串形式取出

    int GetJsonCString(const Json::Value& value, char* str, int n){ if (!value.empty() && va ...

  9. 对象key值排序,以key值(数字)大小顺序遍历属性,helper._sort()

    var helper = { _sort:function(data){ //{“20141216”:{},“20141217”:{}}按大小排序, var arr1 = [],arr2=[]; fo ...

随机推荐

  1. [原创]Java项目统一UTC时间方案

    Java项目统一UTC时间方案 作者:Gods_巨蚁 引言 近期团队的个别项目在进行框架升级后,部分时间值存在8小时误差,原因是错误的将数据库中的时间数据理解成了UTC时间(旧版本认为是北京时间) 考 ...

  2. MSComm 串口

    MSComm 串口 http://www.docin.com/p-761416611.html http://blog.sina.com.cn/s/blog_50cfd0fc0102v27p.html

  3. Celery 与 Flask 大型程序结构的结合

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  4. 01.webservice介绍

    不实现异构,实现远程系统之间的调用.

  5. thinkphp对mysql的CURD操作

    利用thinkphp(3.2.3)来操作数据库,首先要连接数据库.我们需要对某数据库写一个配置文件,thinkphp会根据该配置文件自动连接上数据库.而model文件就不用自定义,内置的即可解决问题. ...

  6. Redis01 Redis服务端环境搭建

    1 前提准备 下载 VM centos6 安装包,安装好虚拟系统 2 安装远程连接工具 工具获取 2.1 SecureCRT.Xshell 连接远程服务器 2.2 WinSCP 向远程服务器发送文件 ...

  7. 496. Next Greater Element I 另一个数组中对应的更大元素

    [抄题]: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subse ...

  8. 在Ubuntu16.04上使用rz上传文件,XXX was skipped

    原本想把hadoop-2.8.5.tar.gz上传到/usr/local/src文件夹下,报错,was skipped 如下图: 换个文件夹位置,更换到本用户文件夹下,可以上传,说明是对文件夹操作权限 ...

  9. Hadoop完全分布式环境搭建(二)——基于Ubuntu16.04设置免密登录

    在Windows里,使用虚拟机软件Vmware WorkStation搭建三台机器,操作系统Ubuntu16.04,下面是IP和机器名称. [实验目标]:在这三台机器之间实现免密登录 1.从主节点可以 ...

  10. 使对象可以像数组一样foreach循环,要求属性必须是私有的(写个类实现Iterator接口)

    <?php class Test implements Iterator { ,,,,); public function __construct() { } // 重置,将数组内部指针指向第一 ...