一个关于json的问题

0 0 html+css+js node.js json javascript
■-落小兮
■-落小兮

声望值:140 0人

2019-02-11 14:43:19 提问

关注 0关注

收藏 0收藏, 72浏览

var book = {
  title: "Professional Javascript",
  authors: [
    "Nicholas C. zakas",
    "Mike"
  ],
  edition: 3,
  year: 2011,
};
var jsonText = JSON.stringify(book, function(key , value){
  switch(key){
    case "authors":
      return value.join("*");
    case "year":
      return book.year+1;
    case "edition":
      return 4;
    default:
      return value;
  }
});
console.log(jsonText);

最后输出

{"title":"Professional Javascript","authors":"Nicholas C. zakas*Mike","edition":4,"year":2012}

这个我是没问题的,但是我把default那边的value随便改成一个数字之后,发现最后只返回那个值,就不返回json字符串了。
比如将

default:
  return value; 

改为

default:
  return 222;   

最后直接输出222
最后的defalut的意思应该是如果不匹配就返回那个222,为什么只会输出222呢。
一直以来感谢大家的帮助!!!!

请先 登录 后评论

1个回答

  • Y_F_Timo130声望 2018-09-25 09:27

    var book = { title: "Professional Javascript", authors: [ "Nicholas C. zakas", "Mike" ], edition: 3, year: 2011, }; var jsonText = JSON.stringify(book, function(key , value){ console.log(key+ ' :' + value) return value }); console.log(jsonText); 你会发现,得到的结果是 :[object Object] title :Professional Javascript authors :Nicholas C. zakas,Mike 0 :Nicholas C. zakas 1 :Mike edition :3 year :2011 {"title":"Professional Javascript","authors":["Nicholas C. zakas","Mike"],"edition":3,"year":2011} 而第一个key为空的那个value,是个object,打印出来,发现他正好就是book本身,由于你的filter函数直接return 222 会导致直接将book的值设置为222,导致switch全部失效。 var book = { title: "Professional Javascript", authors: [ "Nicholas C. zakas", "Mike" ], edition: 3, year: 2011, }; var jsonText = JSON.stringify(book, function(key , value){ if(key=' ') console.log(value) return value }); console.log(jsonText); 得到的结果是 { title: 'Professional Javascript', authors: [ 'Nicholas C. zakas', 'Mike' ], edition: 3, year: 2011 } Professional Javascript [ 'Nicholas C. zakas', 'Mike' ] Nicholas C. zakas Mike 3 2011 {"title":"Professional Javascript","authors":["Nicholas C. zakas","Mike"],"edition":3,"year":2011} 不难发现, json.stringfy的第二个类型为函数的参数,会把传进来的参数本身,构造成key: ' ', value: value 形式进行过滤,然后再过滤属性,递归下去。
    请先 登录 后评论

注册新账号

悬赏追问
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 输入数值
发布追问