Javascript 在JSON中查找具有特定值的多个文档
我有一个复杂的JSON,如下所示:Javascript 在JSON中查找具有特定值的多个文档,javascript,json,Javascript,Json,我有一个复杂的JSON,如下所示: { "a": { "b": { "c": { "price": { "type": "coin", "value": "currency" } } } }, "e": { "f": { "price": { "type": "note", "value": "currency"
{
"a": {
"b": {
"c": {
"price": {
"type": "coin",
"value": "currency"
}
}
}
},
"e": {
"f": {
"price": {
"type": "note",
"value": "currency"
}
}
},
"price": {
"type": "cents",
"value": "dollars"
}
}
"g": {
"price": {
"type": "coin",
"value": "dollars"
}
}
我正在尝试编写一个JavaScript函数,该函数将在任何位置查找“price”,并为其提取“type”和“value”。因此,我的输出应该是:
"coin" : "currency"
"note" : "currency"
"cents" : "dollars"
您可以使用循环中的for…创建递归函数,从而返回对象
const data={“a”:{“b”:{“c”:{“price”:{“type”:“coin”,“value”:“currency”}}},“e”:{“f”:{“price”:{“type”:“note”,“value”:“currency”}}},“price”:{“type”:“cents”,“value”:“dollars”}}
函数getPrice(数据){
常量结果={}
for(让我输入数据){
if(type of data[i]=“object”)object.assign(result,getPrice(data[i]))
如果(i==“price”)Object.assign(结果{
[数据[i].类型]:数据[i].值
})
}
返回结果;
}
const result=getPrice(数据);
console.log(result)
您可以在循环中为…创建递归函数,以返回对象作为结果
const data={“a”:{“b”:{“c”:{“price”:{“type”:“coin”,“value”:“currency”}}},“e”:{“f”:{“price”:{“type”:“note”,“value”:“currency”}}},“price”:{“type”:“cents”,“value”:“dollars”}}
函数getPrice(数据){
常量结果={}
for(让我输入数据){
if(type of data[i]=“object”)object.assign(result,getPrice(data[i]))
如果(i==“price”)Object.assign(结果{
[数据[i].类型]:数据[i].值
})
}
返回结果;
}
const result=getPrice(数据);
log(result)
您需要递归(或不递归)迭代对象的属性。
以下是一些老式javascript:
const testObj={
“a”:{
“b”:{
“c”:{
“价格”:{
“类型”:“硬币”,
“价值”:“货币”
}
}
}
},
“e”:{
“f”:{
“价格”:{
“类型”:“注释”,
“价值”:“货币”
}
}
},
“价格”:{
“类型”:“分”,
“价值”:“美元”
}
};
功能金融机构(accum、obj、prop){
if(对象拥有自己的财产(财产)){
累计推力(obj[prop]);
}
用于(obj中的var p){
如果(对象hasOwnProperty(p)&&p!==prop)
金融机构(accum、obj[p]、prop);
}
}
累计风险值=[];
金融产品(累计、测试、价格);
控制台日志(accum)代码>您需要递归(或不递归)迭代对象的属性。
以下是一些老式javascript:
const testObj={
“a”:{
“b”:{
“c”:{
“价格”:{
“类型”:“硬币”,
“价值”:“货币”
}
}
}
},
“e”:{
“f”:{
“价格”:{
“类型”:“注释”,
“价值”:“货币”
}
}
},
“价格”:{
“类型”:“分”,
“价值”:“美元”
}
};
功能金融机构(accum、obj、prop){
if(对象拥有自己的财产(财产)){
累计推力(obj[prop]);
}
用于(obj中的var p){
如果(对象hasOwnProperty(p)&&p!==prop)
金融机构(accum、obj[p]、prop);
}
}
累计风险值=[];
金融产品(累计、测试、价格);
控制台日志(accum)
您可以检查想要的键price
,并获取新对象的type
和value
,或者深入查看
功能平面(对象){
返回对象。条目(对象)。减少(
(r[k,v])=>Object.assign(r,k=='price'?{[v.type]:v.value}:flat(v)),
{}
);
}
var object={a:{b:{c:{price:{type:“coin”,value:“currency”}}}},e:{f:{price:{type:“note”,value:“currency”}},price:{type:“cents”,value:“dollars”};
控制台日志(平面(对象))
您可以检查想要的键price
,并获取新对象的type
和value
,或者深入查看
功能平面(对象){
返回对象。条目(对象)。减少(
(r[k,v])=>Object.assign(r,k=='price'?{[v.type]:v.value}:flat(v)),
{}
);
}
var object={a:{b:{c:{price:{type:“coin”,value:“currency”}}}},e:{f:{price:{type:“note”,value:“currency”}},price:{type:“cents”,value:“dollars”};
控制台日志(平面(对象))代码>虽然其他答案很好,但它们不允许同一个键有不同的值。例如,如果您有这样的附加价格:
{
"a": {
"b": {
"c": {
"price": {
"type": "coin",
"value": "currency"
}
}
}
},
"e": {
"f": {
"price": {
"type": "note",
"value": "currency"
}
}
},
"price": {
"type": "cents",
"value": "dollars"
}
}
"g": {
"price": {
"type": "coin",
"value": "dollars"
}
}
它将用其他答案覆盖硬币的第一个值,您将得到:
{
"coin": "dollars",
"note": "currency",
"cents": "dollars"
}
如果您有这种情况,并且希望获得硬币的两个不同值,则需要为每个键/值使用单独的对象,而不是将它们作为单个对象的属性:
var json={
“a”:{
“b”:{
“c”:{
“价格”:{
“类型”:“硬币”,
“value”:“货币”
}
}
}
},
“e”:{
“f”:{
“价格”:{
“类型”:“注释”,
“价值”:“货币”
}
}
},
“价格”:{
“类型”:“分”,
“价值”:“美元”
},
“g”:{
“价格”:{
“类型”:“硬币”,
“价值”:“美元”
}
}
};
函数getPrice(数据){
var结果=[];
for(让我输入数据){
如果(i=“价格”)
结果:推({
[数据[i].类型]:数据[i].值
});
else if(数据类型[i]=“对象”)
结果推送(getPrice(数据[i])[0]);
}
返回结果;
}
var-price=getPrice(json);
console.log(price)
虽然其他答案很好,但它们不允许同一个键有不同的值。例如,如果您有这样的附加价格:
{
"a": {
"b": {
"c": {
"price": {
"type": "coin",
"value": "currency"
}
}
}
},
"e": {
"f": {
"price": {
"type": "note",
"value": "currency"
}
}
},
"price": {
"type": "cents",
"value": "dollars"
}
}
"g": {
"price": {
"type": "coin",
"value": "dollars"
}
}
它将用其他答案覆盖硬币的第一个值,您将得到:
{
"coin": "dollars",
"note": "currency",
"cents": "dollars"
}
如果您有这种情况,并且希望获得硬币的两个不同值,则需要为每个键/值使用单独的对象,而不是将它们作为单个对象的属性:
var json={
“a”