JSON的格式和使用方法以及键名为非正常变量的读取方法

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包,其在编程中作为一种通用的数据格式带给我们极大的方便。

JSON中,有两种结构:对象和数组。

object格式,用“{}”引起来的键值对:

var person= {"name":"jack"}

array格式,使用“[]”引起来的object:

var person = [{name:"trump", age:"71"},{name:"hillary", age:"70"}];

两种取值方法为别为对象时,直接“打点使用”,如:person.name。
为数组时根据索引使用,如person[1].age.

JSON对象和JSON字符串:
在数据传输过程中,JSON是以文本格式,即字符串的形式进行传递的,但是JavaScript操作的是JSON对象,所以,实际中常会遇到JSON对象和JSON字符串之间的相互转换。
ex:

    // JSON字符串:
    var jsonStr = '{ "name": "wade", "sex": "male" }';

    // JSON对象:
    var jsonObj = { "name": "Kristein", "sex": "female" };

简单的说,json字符串其实就是把json格式的文件用引号标识成字符串格式。

//由JSON字符串转换为JSON对象
var obj = eval('(' + str + ')');
var obj = str.parseJSON();
var obj = JSON.parse(str); 

注意:如果obj本身就是一个对象,那么使用eval()转换后仍然是json对象,但是使用parseJSON会报异常,但是一般情况下不推荐使用eval(),因为它不安全。举个例子:

var jsonStr = '{name:"jack", action:"alert('unsafe')"};'

以上json字符串通过eval()转换后,获取action会直接弹出“unsafe”。

 //JSON对象转换成字符串
 var jsonStr = obj.toJSONString(); 
 var jsonStr = JSON.stringfy(obj);

ps: 以上方法中,eval()是javascript自带的,其他的均来自于json.js包。新版本的json修改了API,将JSON.stringfy()和JSON.parse()两个转换方法加入了js的内建对象中,即可以直接使用。

最后补充一点:
需要读取一个json格式的文件时,其键名为数字或者非正常变量时如何操作呢?
先贴个小例子获取其中的json每条数据。
data.vue

export default {
      data:function(){
        return {
            "2016Q1": [
              {channel: '娱乐', vv: '17,980', dayrate: '+292%', weekrate: '+5%'},
              {channel: '游戏', vv: '48,133', dayrate: '+48%', weekrate: '+21%'},
              {channel: '动漫', vv: '189,342', dayrate: '+39%', weekrate: '+0%'},
              {channel: '综艺', vv: '106,430', dayrate: '+35%', weekrate: '+12%'}
            ],
            "2016Q2": [
              {channel: '娱乐', vv: '43,910', dayrate: '+414%', weekrate: '+77%'},
              {channel: '游戏', vv: '34,173', dayrate: '+28%', weekrate: '+11%'},
              {channel: '动漫', vv: '89,562', dayrate: '+59%', weekrate: '+29%'},
              {channel: '综艺', vv: '96,189', dayrate: '+37%', weekrate: '+0%'}
            ]
            }
      }
    }

app.vue

import listData from './components/data'

export default {
  name: 'app',
  data(){
    return{
         lists: listData.data()["2016Q1"]               //array
    }
  }

那么当json文件的的键名为数字时如何取值呢,如:

var testJson = {'9527':'soldiers'}; 
alert(testJson.9527); 

这样写是无效的,不会弹出任何东西。
那么如何解决呢? 对于数字键名或者非正常变量字符(比如有空格),必须使用 obj[“key”]的方式。

回到上面,一般情况下可能会直接使用“this.lists = listData.data().2016Q1”来读取数据内容,然而在这里时无效的。
应该使用:

this.lists = listData.data()["2016Q1"];

ps:总结的比较仓促,难免疏忽,如有错误或遗漏,请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kirinlau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值