美文网首页
字符串与json

字符串与json

作者: 倾国倾城的小饼干 | 来源:发表于2018-04-03 11:51 被阅读0次

字符串

字符串的值改变后,二者不相关。例如:

var str='hello jirengu'
var str1=str
str='world'
console.log(str1)//'hello jirengu'

表示

  • 就是0个或者多个排在一起的字符,放在单引号或者双引号之间。
  • 单引号字符串的内部,可以使用双引号,双引号字符串的内部可以使用单引号。
  • 如果非要在单引号字符串的内部使用单引号(或者双引号的内部使用双引号),就必须在内部的单引号(或双引号)前面加反斜杠用来转义。例如:'did she say 'hello''中的反斜杠使其引号失去原有的意义,变成普通字符。\n代表换行。如果想要\n就要\n
  • 字符串默认只能写一行,写成多行就会报错。
'a
b'

如果必须分成一行,可以在每行的尾部使用反斜杠(多行分成一行)

'hello\
world\//注意反斜杠后面不要加空格
';

例如如果是html的话:

<div>\
  <a href='http://jirengu.com'>饥人谷</a>\
</div>

也可以这样:

var longstring='log'
                        +'logg'
                        +'logg';

也可以这样:

var fn=function(){/*
  <div>
    <a href='http://jirengu.com'>饥人谷</a>
  </div>
  */
}
console.log(fn.toString())//可以打印出函数体

所以由多行变成一行可以这样:

(function(){/*
  line1
  line2
*/}).toString().split('\n').slice(1,-1).join('\n')//line1 line2 line3

反斜杠

\是转义符需要包含反斜杠需要再加一个反斜杠对自身进行转义\。用于把特殊字符变成普通字符。

字符串操作

  • 字符串连接
var str10='hello'//可以加空格,打印出来就有空格
var str11='world'
console.log(str10+str11)//访问:console.log(str10.length)
console.log(str10.length-1);console.log(str10[0]);编码console.log(str10.charCodeAt(0))
  • 字符串截取(两种方法)
var str='hello world'
var sub1=str.subStr(1,3)//第一个是开始位置,第二个是长度
var sub2=str.subString(1,3)//第一个是开始位置,第二个是结束位置。长度为第二个-第一个
  • 查找
var str='hello my world';
var s1=str.search('my')//6,找不到则为-1
var s2=str.replace('my','your');//11
var s3=str.match('my')//返回匹配的数组
  • 大小写
var str='hello'
str.toUpperCase();
str.toLowerCase();
  • 切割
var str='hello'
str.split('')//['h','e','l','l','o']以空字符串作为切割,则得到一个数组里面每一项。
var str='abcdefg'//倒过来
str.split('')
str.split('').reverse()
str.split('').reverse().join('')//string.split执行的操作与Array.join执行的操作是相反的。写成函数就是function isReverse(str){
  return str===str.split('').reverse().join()
}

json基础知识

json语法

json语法可以表示简单值、对象、数组三种类型的值。json必须使用双引号。没有undefind。

对象

json与js有2点不同。首先没有声明变量,其次没有末尾的分号。json的属性名必须加双引号。
js:

var obj={
    name: 'xueting',
    age: 22,
};

json:

{
    "name":'xueting',
    "age":21;
}

读取属性:

var obj={
  "name":"jirengu",
  "age": 30,
  "2435":"hello"
}//obj.name可以,但是obj.2435就不可以了。obj.后面必须是下划线或者字符,可以这样写:obj['2435'],obj['age']。也可以赋值obj.name=''rouyu'
json数组

json数组采用的就是js中的数组字面量的形式。不同的是没有变量和分号。

["title":'professional',"educition":3]

解析与序列化

序列化(筛选数据)

用到了JSON.stringify()把一个js对象序列化为一个JSON字符串。
可以接收三个参数,第二个参数是个过滤器,可以是数组也可以是函数。第三个参数可选,表示是否在JSON中保留缩进。
如果是数组:

var book={
    title:'professional',
    edition:3,
    year:2011
}
var jsonText=JSON.stringify(book,[title,edition])//输出的结果就是title和edition两个属性。

如果是函数:

var xiaoming={
    name:'小明',
    age:14,
    skills:['js','java','pyhon']
}
JSON.stringify(xiaoming,function  convert(key,value){
    if(typeof value==='string'){
        return value.toUpperCase();
    }
    return value;
}//{"name":'小明',"age":14,"skill":['JS','JAVA','PYHON']}

这样输出的时候,会成一行,所以要使用缩进输出。JSON.stringify(xiaoming,null,'')
还可以使用toJSON()方法来直接返回JSON应该序列化的数据:

var xiaoming={
    name:'小明',
    age:14,
    height:1.65,
    toJSON:function(){
        return{
         'name':this.name,
         'age':this.age
        };
    }
};
JSON.stringify(xiaoming);//{"name":'小明',"age":14}

解析选项

JSON.parse()可以将json解析为js。
可以接收两个参数,第二个参数可以是函数。这个函数被称为还原函数。如果还原函数返回undefind则表示将从结果中删除相应的键。和序列化差不多。

var obj=JSON.parse("name":'小明',function(key,value){
    if(key==='name'){
        return value+'同学'
    }
    return value;
});
console.log(obj)//{name:'小明同学'}

在日期中的应用:
首先看下面的例子:

var book={
    title:'professional',
    releaseDate:new Date(2012,11)
}
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText);
console.log(bookCopy.releaseDate)//2012-11如果是console.log(bookCopy.getFullYear())就会出错。
var book={
    title:'professional',
    edition:3,
    year:2012,
    releaseDate:new Date(2012,11)
}
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText,function(key,value){
    if(key=='releaseDate'){
        return new Date(value)
    }else{
        return value;
    }
});
alert(bookCopy.releaseDate.getFullYear())

实例

对于 HTTP 协议而言,HTML、CSS、JS、JSON 的本质都是符合某种语法的字符串

  1. 使用数组拼出字符串

    var prod = {
    name: '女装',
    styles: ['短款', '冬季', '春装']
};
function get(data){
    var arr='<dl class="product">';
    arr+='<dt>+data[name]+</dt>';
    for(var i=0;i<data.styles.length;i++){
      arr+='<dd>'+data['styles'][i]+'</dd>';
     
};
    arr+='</dl>';
    return arr
};
var result=get(prod);
console.log(result)
  1. 一行字符串,多行显示

例如:var str='abcncb'

var str='abc\
 ncb\
'//abc  ncb
var str='abc'
+'ncb'//abcncb
  1. 输出结果为字符串

var str='hello\\\\饥人谷'
console.log(str)
  1. 代码输出

var str = 'jirengu\nruoyu'
console.log(str.length)//输出13

原因:\n是转义字符,在js中占一个字节。

  1. 写一个函数,判断一个字符串是回文字符串

例如判断str=abcdcba是回文字符串

var arr1='aabaa';
function isReverse(str){
    newstr=str.split(' ').reverse().join()
    if(newstr===str){
      console.log('是回文字符串')
}else{
    console.log('不是回文字符串')
}
}
var arr=isReverse(arr1)
console.log(arr)
  1. 统计字符串中出现频率最高的字符

var arr='hellojirenguhellohhhh';
var obj={};
for(i=0;i<arr.length;i++){
    if(obj[arr[i]]){
    ++obj[arr[i]];
}else{
    obj[arr[i]]=1;
}
}
var count=0;
var maxValue
for (key in obj){
    if(obj[key]>count){
     count=obj[key] 
     maxValue=key
}
}
console.log(count,maxValue)
  1. 写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串

var a='background-color'
    var b='list-style-image'
function camelize(str){
    return str.split('-').join('')
}
var arr=camelize(a)
var arr1=camelize(b)
console.log(arr)
console.log(arr1)
  1. 写一个 ucFirst函数,返回第一个字母为大写的字符

var arr='hunger';
function ucFirst(str){
    var str=str[0].toUpperCase()+arr.substr(1,5);
    return str
}
var a=ucFirst(arr);
console.log(a)
  1. 写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...

function truncate(str,maxlength){
    if(str.length>maxlength){
    var arr=str.substring(0,maxlength)+'...';
    return arr
}
}
var a=truncate("hello, this is hunger valley,", 10)
console.log(a)
  1. json格式数据:null 字符串 数字 布尔 对象 数组
    json格式的数据表示对象:
    1. 复合类型的值只能是数组或是对象,不能是函数、正则表达式对象、日期对象。
    2. 对象的键名必须放在双引号里面
    3. 数组或者对象最后一个成员的后面不能加逗号
      例如:
var json1={"name":"ruoyu","age":"24"}

window.JSON是用于判断浏览器是否兼容json的用法,例如ie8版本以上才内置支持json.parse方法,对此常见这样的写法:

if (window.JSON){
    jsonObj2=JSON.parse(json);
}else{

}
  1. js对象与json字符串的转换
var str='{"name":"ruoyu","age":30}'
var obj=JSON.parse(str)//转化为对象
console.log(JSPN.stringify(obj))//转换为json字符串

相关文章

网友评论

      本文标题:字符串与json

      本文链接:https://www.haomeiwen.com/subject/fweqhftx.html