js 如何筛选json对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 如何筛选json对象相关的知识,希望对你有一定的参考价值。

比如一个json对象包含所有产品信息, 请问如何筛选出产品编号包含'1001'或者产品名称包含 '1001' 数据?

参考技术A <script>
var
products=[id:"1001",name:"a",id:"1002",name:"hava1001"];
for(var
i
in
products)
var
p=products[i].id;
//alert(p.charAt("1001")!=-1);charAt是判断id字段是否包含‘1001’,查询不到返回-1
if(p.charAt("1001")!=-1)
alert("产品编号:"+products[i].id+";产品名称:"+products[i].name);
break;
;

</script>
products[索引]获得json数组对象,然后
对象.属性
获得属性值。
类比
一下
你就明白怎样筛选,希望我的回答能帮到您,也希望您对我的回答做出评价
兼_听则明
http://hi.baidu.com/你我同步/home

JSON + JS:如何递归地将空对象 设置为 null?

【中文标题】JSON + JS:如何递归地将空对象 设置为 null?【英文标题】:JSON + JS: How to recursively set empty objects to null?JSON + JS:如何递归地将空对象 设置为 null? 【发布时间】:2015-05-23 23:45:22 【问题描述】:

我的 JSON 请求中有一些空对象:

FXP:

"createdBy": ,

我想在请求发送到服务器之前将这些空对象转换成以下结构:

"createdBy": null,

请问我怎样才能在整个对象中递归呢?

示例:


    "main": 
        "id": null,
        "archived": true,
        "createdBy": ,
        "creationTime": null,
        "location": 
            "id": 79,
            "address": 
                "id": 79,
                "city": null,
                "latitude": 50.072613888888895,
                "longitude": 14.543111111111111,
                "street": null,
                "streetNumber": null,
                "district": null
            ,
            "bsc": "BSC123",
            "code": null,
            "indoorOutdoor": null,
            "siteId": "A0RST",
            "stationType": 
                "id": 1,
                "name": "Indoor solution"
            ,
            "shared": false,
            "sapSacIrnCode": "31049.0",
            "abloyLocation": "NA",
            "name": "A0RST"
        ,
        "actionName": ,
        "orderType": ,
        "project": 
            "id": 1,
            "cards": [],
            "color": null,
            "managerCustomer": null,
            "managerSuntel": null,
            "heliosSync": false,
            "name": "Vodafone Test",
            "parentProject": null,
            "team": null,
            "facility": 
                "id": 1,
                "code": 110,
                "name": "110_MANAGEMENT"
            ,
            "workers": []
        ,
        "note": "",
        "orderNumber": "2626262"
    ,
    "milestoneSequence": ,
    "milestones": []

【问题讨论】:

请问您为什么要这样做?处理服务器端可能更容易。 您能提供更多上下文吗?一切嵌套有多深?您可以使用 Object.keys(your_object).forEach(callback) 循环一个对象,然后您可以检查 Object.keys(sub_object) 以查看它有多少键。如果它没有键,您可以将其设置为 null。我认为如果您想深入了解此检查,这可能会变得非常混乱.. 所以这真的与 JSON 无关吧?您只是想在序列化为 JSON 之前用 null 替换根对象中的空对象吗? 【参考方案1】:

JSON.parse 分别。 JSON.stringify 您可以将函数作为第二个参数传递。 此函数获取名称和值作为参数。 因此,您可以在解析期间调整值。字符串化。

【讨论】:

你的意思是JSON.stringify,对吧? 是的,JSON.parse 用于字符串->对象。 JSON.stringify 用于对象->字符串。 这是对象,不是字符串。我不会将对象修改为字符串,更新然后再转换回对象。 OP 的措辞有点混乱,因为他开始称它为 JSON。无论哪种方式,都可以通过回调来完成。 感谢您的 cmets,因为我看到 JSON 请求,我知道它已经是一个字符串...我调整了我的答案...【参考方案2】:

这是一个可能对您有所帮助的递归函数:

function nullify  (obj)  
   for(key in obj)  
      if(JSON.stringify(obj[key])=="") 
          obj[key] = null;
       else if (typeof obj[key] == "object" && !Date.parse(obj[key])) 
          obj[key] = nullify(obj[key]);
      
   
   return obj;

对于这个例子:

var obj = 
  "b": 1,
  "c": ,
  "d": 
    "a": 1,
    "b": ,
    "c": 
      "x": 1,
      "y": 
    
  

nullify(obj); 的结果是


  "b": 1,
  "c": null,
  "d": 
    "a": 1,
    "b": null,
    "c": 
      "x": 1,
      "y": null
    
  

【讨论】:

你能把你用的json对象贴出来吗? 它对我有用,再试一次,可能是你尝试了旧版本的功能,georg 编辑了一个错误。再试一次,让我知道它是否有效 还是同样的错误ReferenceError: key is not defined, could be by 'undefined' value in object? 你确定你试过你在你的问题上发布的 json 对象吗?因为我试过了,它成功了,我什至添加了一个未定义的值并且没有错误,请发布你导致这个错误的json对象【参考方案3】:

如果你不太喜欢使用字符串:

function emptyObjToNull(object)
    var isObject, hasKeys, isArray, current;
    for(var k in object)
        if(!object.hasOwnProperty(k))
            return;
        current = object[k];
        isObject = typeof current == 'object';
        hasKeys = isObject && Object.keys(current).length !== 0;
        isArray = isObject && Object.prototype.toString.call(current) === "[object Array]";
        if(hasKeys)
            emptyObjToNull(current);
        else if(isArray)
            for(var i = current.length; i--;)
                emptyObjToNull(current);
            
        else if(isObject && !hasKeys)
            object[k] = null; // Set the key directly, not the reference
        
    

小提琴:http://jsfiddle.net/cfvm3r63/3/

【讨论】:

我解决了这个问题: var orderString = JSON.stringify($scope.order); var orderStringRaplaced = orderString.split("").join(null);【参考方案4】:

这是使用object-scan 的解决方案。根据您的情况,使用依赖项可能有意义

// const objectScan = require('object-scan');

const data = "main":"id":null,"archived":true,"createdBy":,"creationTime":null,"location":"id":79,"address":"id":79,"city":null,"latitude":50.072613888888895,"longitude":14.543111111111111,"street":null,"streetNumber":null,"district":null,"bsc":"BSC123","code":null,"indoorOutdoor":null,"siteId":"A0RST","stationType":"id":1,"name":"Indoor solution","shared":false,"sapSacIrnCode":"31049.0","abloyLocation":"NA","name":"A0RST","actionName":,"orderType":,"project":"id":1,"cards":[],"color":null,"managerCustomer":null,"managerSuntel":null,"heliosSync":false,"name":"Vodafone Test","parentProject":null,"team":null,"facility":"id":1,"code":110,"name":"110_MANAGEMENT","workers":[],"note":"","orderNumber":"2626262","milestoneSequence":,"milestones":[];

const nullify = (input) => objectScan(['**'], 
  rtn: 'count',
  filterFn: ( value, parent, property ) => 
    if (
      value instanceof Object
      && !Array.isArray(value)
      && Object.keys(value).length === 0
    ) 
      parent[property] = null;
      return true;
    
    return false;
  
)(input);

console.log(nullify(data)); // returns number of changes
// => 4
console.log(data);
// =>  main:  id: null, archived: true, createdBy: null, creationTime: null, location:  id: 79, address:  id: 79, city: null, latitude: 50.072613888888895, longitude: 14.543111111111111, street: null, streetNumber: null, district: null , bsc: 'BSC123', code: null, indoorOutdoor: null, siteId: 'A0RST', stationType:  id: 1, name: 'Indoor solution' , shared: false, sapSacIrnCode: '31049.0', abloyLocation: 'NA', name: 'A0RST' , actionName: null, orderType: null, project:  id: 1, cards: [], color: null, managerCustomer: null, managerSuntel: null, heliosSync: false, name: 'Vodafone Test', parentProject: null, team: null, facility:  id: 1, code: 110, name: '110_MANAGEMENT' , workers: [] , note: '', orderNumber: '2626262' , milestoneSequence: null, milestones: [] 
.as-console-wrapper max-height: 100% !important; top: 0
&lt;script src="https://bundle.run/object-scan@13.7.1"&gt;&lt;/script&gt;

免责声明:我是object-scan的作者

【讨论】:

以上是关于js 如何筛选json对象的主要内容,如果未能解决你的问题,请参考以下文章

js字符串如何转换成对象?

如何将 javascript 对象转换成 json字符串

JavaScript:如何将JSON对象转换成JSON字符串呢

如何获取前端传过来的json对象?

js中如何向json数组添加元素

如何使用node.js将多个json的对象合并到一个json文件中