javascript - 使用 JSON.parse reviver 混淆字段

标签 javascript json debugging reviver-function

我试图用 JSON.parse 滥用 reviver 函数。

我基本上想让某些字段“空”。

如果我这样做:

var json_data = JSON.parse(j, function(key, value) {
  if (key == "name") {        
    return value;
  } else {
    return null;    
  }    
});

整个 json_data 对象最终为 null。事实上,无论我做什么 else,它都定义了 json_object 的值。

有趣的是,这按预期工作:

var json_data = JSON.parse(j, function(key, value) {
  if (key == "name") {        
    return "name";
  } else {
    return value;    
  }    
});

属性“name”现在的值为“name”。

有问题的 JSON:

var j = '{"uuid":"62cfb2ec-9e43-11e1-abf2-70cd60fffe0e","count":1,"name":"Marvin","date":"2012-05-13T14:06:45+10:00"}';

更新

我刚刚意识到我想做的事情的反面也有效,所以我可以使名称字段无效:

var json_data = JSON.parse(j, function(key, value) {
  if (key == "name") {        
    return null;
  } else {
    return value;    
  }    
});

最佳答案

通过一些实验,它看起来像是对函数进行了最终调用,其中键是一个空字符串,值是顶级对象:

> JSON.parse('{"hello": "world"}', function(k, v) { console.log(arguments); return v; })
["hello", "world"]
["", Object]

所以你可以使用:

var json_data = JSON.parse(j, function(key, value) {
  if (key == "name" || key === "") {        
    return value;
  } else {
    return null;    
  }    
});

现在,由于 "" 确实是一个有效的 JSON key ,要 100% 正确,最好使用类似的东西:

var json_data;
JSON.parse(j, function(key, value) {
  if (key == "name") {        
    return value;
  } else if (key === "") {
    json_data = value;
    return null;
  } else {
    return null;    
  }    
});

但这可能有点偏执 ;)

关于javascript - 使用 JSON.parse reviver 混淆字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10595386/

相关文章:

javascript - 如何给表单动态添加 "hidden"字段?

javascript - 未捕获的类型错误 : sujet is not a function

python - 为什么 pdb 不能访问包含异常的变量?

javascript - 如何更新 div 元素内 html 元素的 id 和名称?

javascript - Colossal Caves Adventure - 使用 javascript 访问数据源

android - 如何在Android上的RecyclerView中显示其他JsonArray

javascript - 将 json HashMap 加载到 javascript 对象中

javascript - 使用类将 JSON 对象转换为 typescript 类型变量的正确方法?

android - Android 平台源代码中的断点

iOS 应用程序在方法调用时崩溃