繁体   English   中英

根据元素名称停止深度嵌套的 JSON 数组项/对象

[英]Stop Deeply Nested JSON Array Items/Objects Based on Element Name

So, I'm relatively new to javascript, and I'm working with a client-side javascript function that inserts JSON results pushed to it from the server.

我想停止某些结果,与填充结果的 javascript 无关。

通常,如果 js 是我自己的,我会猜测我会使用“拼接”function 来删除我不希望出现的 JSON 数组条目,这听起来对吗? (我通过在 StartPage 和这里的大量搜索到达那里)

但是,我需要任何 function 我(老实说,“你”)想出胜过嵌入式结果。

Essentially this is normal behaviour: Webpage > JavaScript Parses JSON for Initial Results then Webpage > Scroll > JavaScript Parses JSON for More Results

我想插入一些东西来阻止我不喜欢的任何 JSON 项目。 我不知道如何表示,我假设: Worker in Extension/Add-On > Webpage > etc 我怀疑这可以用 CSS 来完成......但这太棒了,正如我刚才所说它在我的个人。

如果是拼接,我会有一个模糊的想法(但我真的是瞎了眼)如何在拼接的基础上做到这一点,但我已经在苦苦挣扎了,这对于疯狂地深深嵌入的对象来说会加深我试图排除。


所以。 我正在查看的部分中有很多json 数据。

我完全专注于在这里删除数组,但最终目标是两个部分:

  1. levelOneB的“ daContentShaper ”中的“ contents ”数组中,我想从数组中删除子对象“ content ”中有一个名为“ contentTypeA ”的元素的任何项目。 还有另一个 object 和 label ' ahThisIsTheBContent ',我也希望它消失了,它点缀在 JSON 中。 所有其他项目(TypeB、TypeC 或其他)必须保留。
  2. 此外,在所述“ content ”object 中,我想将“ false ”的任何“ visible ”值更改为“ true ”。

这绝对是可能的,它只是在研究如何确保代码的 rest (在其他地方可能有类似 - 不一样 - 部分)不受我的这个数组拼接的影响。

{
    "levelOneA": {
        "levelOneAArr": [ { "name": "me", "age": 1 }, { "name": "you", "age": 2 }, { "name": "them", "age": 3 } ],
        "levelOneAText": "blah"
    },
    "levelOneB": {
        "levelOneBDeepBro": {
            "levelOneBDeepBroTabs": [
                {
                    "levelOneBDeepBroTabsShaper": {
                        "isBlessed": true,
                        "daContent": {
                            "daContentShaper": {
                                "contents": [
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeA": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "ahThisIsTheBContent": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": false
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeB": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "jinkies"
                                                        },
                                                        {
                                                            "bitBText1": "ruh roh"
                                                        },
                                                        {
                                                            "bitBText1": "like, wow"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlah"
                                        }
                                    },
                                    {
                                        "contentItem": {
                                            "content": {
                                                "contentTypeC": {
                                                    "bitA": "bitAText",
                                                    "bitB": [
                                                        {
                                                            "bitBText1": "cripes"
                                                        },
                                                        {
                                                            "bitBText1": "crikey"
                                                        },
                                                        {
                                                            "bitBText1": "crimeny"
                                                        }
                                                    ],
                                                    "visible": true
                                                }
                                            },
                                            "extraNonsense": "bingoBlahBlahBlah"
                                        }
                                    }
                                ],
                                "myDadIsBetter": "Go Faster Stripes, innit."
                            }
                        },
                        "tabId": "Bro"
                    }
                }
            ]
        }
    },
    "levelOneC": "CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=",
    "levelOneD": {
        "iAmJustHappyToBeNominated": "innit",
        "damnYourWholePopCultureSubsection": "flames abound"
    }
}

这就是使用对象扫描解决此问题的方法

请注意,我在匹配中使用了很多** 您可以准确地写出这些,这取决于您的要求

 // const objectScan = require('object-scan'); const data = { levelOneA: { levelOneAArr: [{ name: 'me', age: 1 }, { name: 'you', age: 2 }, { name: 'them', age: 3 }], levelOneAText: 'blah' }, levelOneB: { levelOneBDeepBro: { levelOneBDeepBroTabs: [ { levelOneBDeepBroTabsShaper: { isBlessed: true, daContent: { daContentShaper: { contents: [ { contentItem: { content: { contentTypeA: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: true } }, extraNonsense: 'bingoBlah' } }, { contentItem: { content: { ahThisIsTheBContent: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: false } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeB: { bitA: 'bitAText', bitB: [ { bitBText1: 'jinkies' }, { bitBText1: 'ruh roh' }, { bitBText1: 'like, wow' } ], visible: false } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeC: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: false } }, extraNonsense: 'bingoBlahBlahBlah' } } ], myDadIsBetter: 'Go Faster Stripes, innit.' } }, tabId: 'Bro' } } ] } }, levelOneC: 'CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=', levelOneD: { iAmJustHappyToBeNominated: 'innit', damnYourWholePopCultureSubsection: 'flames abound' } }; const logic = { 'levelOneB.**.daContentShaper.contents[*].*.content.{contentTypeA,ahThisIsTheBContent}': ({ key, parents }) => { parents[3].splice(key[key.length - 4], 1); }, 'levelOneB.**.daContentShaper.contents.**.visible': ({ value, parent, property }) => { if (value === false) { parent[property] = true; } } }; const modify = objectScan(Object.keys(logic), { rtn: 'count', filterFn: ({ matchedBy, property, key, value, parent, parents }) => { matchedBy.forEach((m) => logic[m]({ property, key, value, parent, parents })); } }); console.log(modify(data)); // => 6 console.log(data); // => { levelOneA: { levelOneAArr: [ { name: 'me', age: 1 }, { name: 'you', age: 2 }, { name: 'them', age: 3 } ], levelOneAText: 'blah' }, levelOneB: { levelOneBDeepBro: { levelOneBDeepBroTabs: [ { levelOneBDeepBroTabsShaper: { isBlessed: true, daContent: { daContentShaper: { contents: [ { contentItem: { content: { contentTypeB: { bitA: 'bitAText', bitB: [ { bitBText1: 'jinkies' }, { bitBText1: 'ruh roh' }, { bitBText1: 'like, wow' } ], visible: true } }, extraNonsense: 'bingoBlahBlah' } }, { contentItem: { content: { contentTypeC: { bitA: 'bitAText', bitB: [ { bitBText1: 'cripes' }, { bitBText1: 'crikey' }, { bitBText1: 'crimeny' } ], visible: true } }, extraNonsense: 'bingoBlahBlahBlah' } } ], myDadIsBetter: 'Go Faster Stripes, innit.' } }, tabId: 'Bro' } } ] } }, levelOneC: 'CAAQhGciEwi0iqD5-ZbwAhUBPvEFHQMKAeo=', levelOneD: { iAmJustHappyToBeNominated: 'innit', damnYourWholePopCultureSubsection: 'flames abound' } }
 .as-console-wrapper {max-height: 100%;important: top: 0}
 <script src="https://bundle.run/object-scan@14.3.0"></script>

免责声明:我是对象扫描的作者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM