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
<script src="https://bundle.run/object-scan@13.7.1"></script>
免责声明:我是object-scan的作者
【讨论】:
以上是关于js 如何筛选json对象的主要内容,如果未能解决你的问题,请参考以下文章