代码之家  ›  专栏  ›  技术社区  ›  Aravinda Meewalaarachchi

按对象值穿透JSON响应

  •  1
  • Aravinda Meewalaarachchi  · 技术社区  · 8 年前

    我收到了以下信息 JSON 服务器的响应和我的要求是显示servlet的详细信息。

    if(dataStoreLogFileSize > 10 && "dataStoreLogLevel": "production".)
    

    我已经编写了以下javascript代码片段来穿透 JSON公司 按这些值,但它不能正常工作。有人能帮我吗?

    {
    "web-app": {
        "servlet": [{
                "servlet-name": "cofaxCDS",
                "servlet-class": "org.cofax.cds.CDSServlet",
                "init-param": {
                    "configGlossary:installationAt": "Philadelphia, PA",
                    "configGlossary:adminEmail": "ksm@pobox.com",
                    "configGlossary:poweredBy": "Cofax",
                    "configGlossary:poweredByIcon": "/images/cofax.gif",
                    "configGlossary:staticPath": "/content/static",
                    "templateProcessorClass": "org.cofax.WysiwygTemplate",
                    "templateLoaderClass": "org.cofax.FilesTemplateLoader",
                    "templatePath": "templates",
                    "templateOverridePath": "",
                    "defaultListTemplate": "listTemplate.htm",
                    "defaultFileTemplate": "articleTemplate.htm",
                    "useJSP": false,
                    "jspListTemplate": "listTemplate.jsp",
                    "jspFileTemplate": "articleTemplate.jsp",
                    "searchEngineListTemplate": "forSearchEnginesList.htm",
                    "searchEngineFileTemplate": "forSearchEngines.htm",
                    "searchEngineRobotsDb": "WEB-INF/robots.db",
                    "useDataStore": true,
                    "dataStoreClass": "org.cofax.SqlDataStore",
                    "redirectionClass": "org.cofax.SqlRedirection",
                    "dataStoreName": "cofax",
                    "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
                    "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
                    "dataStoreUser": "sa",
                    "dataStorePassword": "dataStoreTestQuery",
                    "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
                    "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
                    "dataStoreInitConns": 10,
                    "dataStoreLogFileSize": 10,
                    "dataStoreMaxConns": 100,
                    "dataStoreConnUsageLimit": 100,
                    "dataStoreLogLevel": "production",
                    "maxUrlLength": 500
                }
            },
            {
                "servlet-name": "cofaxTools",
                "servlet-class": "org.cofax.cms.CofaxToolsServlet",
                "init-param": {
                    "templatePath": "toolstemplates/",
                    "log": 1,
                    "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
                    "logMaxSize": "",
                    "dataLog": 1,
                    "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
                    "dataLogMaxSize": "",
                    "removePageCache": "/content/admin/remove?cache=pages&id=",
                    "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
                    "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
                    "lookInContext": 1,
                    "adminGroupID": 4,
                    "betaServer": true,
                    "dataStoreInitConns": 10,
                    "dataStoreLogFileSize": 5,
                    "dataStoreMaxConns": 100,
                    "dataStoreConnUsageLimit": 100,
                    "dataStoreLogLevel": "test",
                    "maxUrlLength": 500
                }
            }
        ],
        "servlet-mapping": {
            "cofaxCDS": "/",
            "cofaxEmail": "/cofaxutil/aemail/*",
            "cofaxAdmin": "/admin/*",
            "fileServlet": "/static/*",
            "cofaxTools": "/tools/*"
        },
    
        "taglib": {
            "taglib-uri": "cofax.tld",
            "taglib-location": "/WEB-INF/tlds/cofax.tld"
        }
      }
    }
    

    +*****************************************************************+

    //Some code above
    
    let foo = data.filter(object => (object.dataStoreLogLevel === 'production'
                          && object => (object.dataStoreLogFileSize > '10');
    console.log('Servlet Details Test' + foo);
    
    //Code continues 
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   wobsoriano    8 年前

    const jsoncode = {
      "web-app": {
    servlet: [
      {
        "servlet-name": "cofaxCDS",
        "servlet-class": "org.cofax.cds.CDSServlet",
        "init-param": {
          "configGlossary:installationAt": "Philadelphia, PA",
          "configGlossary:adminEmail": "ksm@pobox.com",
          "configGlossary:poweredBy": "Cofax",
          "configGlossary:poweredByIcon": "/images/cofax.gif",
          "configGlossary:staticPath": "/content/static",
          templateProcessorClass: "org.cofax.WysiwygTemplate",
          templateLoaderClass: "org.cofax.FilesTemplateLoader",
          templatePath: "templates",
          templateOverridePath: "",
          defaultListTemplate: "listTemplate.htm",
          defaultFileTemplate: "articleTemplate.htm",
          useJSP: false,
          jspListTemplate: "listTemplate.jsp",
          jspFileTemplate: "articleTemplate.jsp",
          searchEngineListTemplate: "forSearchEnginesList.htm",
          searchEngineFileTemplate: "forSearchEngines.htm",
          searchEngineRobotsDb: "WEB-INF/robots.db",
          useDataStore: true,
          dataStoreClass: "org.cofax.SqlDataStore",
          redirectionClass: "org.cofax.SqlRedirection",
          dataStoreName: "cofax",
          dataStoreDriver: "com.microsoft.jdbc.sqlserver.SQLServerDriver",
          dataStoreUrl:
            "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
          dataStoreUser: "sa",
          dataStorePassword: "dataStoreTestQuery",
          dataStoreTestQuery: "SET NOCOUNT ON;select test='test';",
          dataStoreLogFile: "/usr/local/tomcat/logs/datastore.log",
          dataStoreInitConns: 10,
          dataStoreLogFileSize: "1GB",
          dataStoreMaxConns: 100,
          dataStoreConnUsageLimit: 100,
          dataStoreLogLevel: "production",
          maxUrlLength: 500
        }
      },
      {
        "servlet-name": "cofaxTools",
        "servlet-class": "org.cofax.cms.CofaxToolsServlet",
        "init-param": {
          templatePath: "toolstemplates/",
          log: 1,
          logLocation: "/usr/local/tomcat/logs/CofaxTools.log",
          logMaxSize: "",
          dataLog: 1,
          dataLogLocation: "/usr/local/tomcat/logs/dataLog.log",
          dataLogMaxSize: "",
          removePageCache: "/content/admin/remove?cache=pages&id=",
          removeTemplateCache: "/content/admin/remove?cache=templates&id=",
          fileTransferFolder:
            "/usr/local/tomcat/webapps/content/fileTransferFolder",
          lookInContext: 1,
          adminGroupID: 4,
          betaServer: true,
          dataStoreInitConns: 10,
          dataStoreLogFileSize: "0.5GB",
          dataStoreMaxConns: 100,
          dataStoreConnUsageLimit: 100,
          dataStoreLogLevel: "test",
          maxUrlLength: 500
        }
      }
    ],
    "servlet-mapping": {
      cofaxCDS: "/",
      cofaxEmail: "/cofaxutil/aemail/*",
      cofaxAdmin: "/admin/*",
      fileServlet: "/static/*",
      cofaxTools: "/tools/*"
    },
    
    taglib: {
      "taglib-uri": "cofax.tld",
      "taglib-location": "/WEB-INF/tlds/cofax.tld"
    }
      }
    };
    
    // jsoncode is your json response from server
    const final = jsoncode['web-app'].servlet.filter((s) => {
      // get the number from dataStoreLogFileSize
      const size = s['init-param'].dataStoreLogFileSize.replace(/[^0-9\.]+/g, '');
      // make sure the size is a number by adding a plus sign
      return +size >= 1 && s['init-param'].dataStoreLogLevel === 'production';
    });
    
    console.log(final);
        2
  •  2
  •   Taki    8 年前

    你过滤了错误的数组 dataStoreLogLevel dataStoreLogFileSize data['web-app'][0]['servlet']['init-param'] .filter data['web-app'].servlet

    对于需要使用的文件大小 parseFloat

    你需要修复 语法。

    , console.log 结果是:

    const data = {
        "web-app": {
            "servlet": [{
                    "servlet-name": "cofaxCDS",
                    "servlet-class": "org.cofax.cds.CDSServlet",
                    "init-param": {
                        "configGlossary:installationAt": "Philadelphia, PA",
                        "configGlossary:adminEmail": "ksm@pobox.com",
                        "configGlossary:poweredBy": "Cofax",
                        "configGlossary:poweredByIcon": "/images/cofax.gif",
                        "configGlossary:staticPath": "/content/static",
                        "templateProcessorClass": "org.cofax.WysiwygTemplate",
                        "templateLoaderClass": "org.cofax.FilesTemplateLoader",
                        "templatePath": "templates",
                        "templateOverridePath": "",
                        "defaultListTemplate": "listTemplate.htm",
                        "defaultFileTemplate": "articleTemplate.htm",
                        "useJSP": false,
                        "jspListTemplate": "listTemplate.jsp",
                        "jspFileTemplate": "articleTemplate.jsp",
                        "searchEngineListTemplate": "forSearchEnginesList.htm",
                        "searchEngineFileTemplate": "forSearchEngines.htm",
                        "searchEngineRobotsDb": "WEB-INF/robots.db",
                        "useDataStore": true,
                        "dataStoreClass": "org.cofax.SqlDataStore",
                        "redirectionClass": "org.cofax.SqlRedirection",
                        "dataStoreName": "cofax",
                        "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
                        "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
                        "dataStoreUser": "sa",
                        "dataStorePassword": "dataStoreTestQuery",
                        "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
                        "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
                        "dataStoreInitConns": 10,
                        "dataStoreLogFileSize": "1GB",
                        "dataStoreMaxConns": 100,
                        "dataStoreConnUsageLimit": 100,
                        "dataStoreLogLevel": "production",
                        "maxUrlLength": 500
                    }
                },
                {
                    "servlet-name": "cofaxTools",
                    "servlet-class": "org.cofax.cms.CofaxToolsServlet",
                    "init-param": {
                        "templatePath": "toolstemplates/",
                        "log": 1,
                        "logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
                        "logMaxSize": "",
                        "dataLog": 1,
                        "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
                        "dataLogMaxSize": "",
                        "removePageCache": "/content/admin/remove?cache=pages&id=",
                        "removeTemplateCache": "/content/admin/remove?cache=templates&id=",
                        "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
                        "lookInContext": 1,
                        "adminGroupID": 4,
                        "betaServer": true,
                        "dataStoreInitConns": 10,
                        "dataStoreLogFileSize": "0.5GB",
                        "dataStoreMaxConns": 100,
                        "dataStoreConnUsageLimit": 100,
                        "dataStoreLogLevel": "test",
                        "maxUrlLength": 500
                    }
                }
            ],
            "servlet-mapping": {
                "cofaxCDS": "/",
                "cofaxEmail": "/cofaxutil/aemail/*",
                "cofaxAdmin": "/admin/*",
                "fileServlet": "/static/*",
                "cofaxTools": "/tools/*"
            },
    
            "taglib": {
                "taglib-uri": "cofax.tld",
                "taglib-location": "/WEB-INF/tlds/cofax.tld"
            }
        }
    }
    
    let foo = data['web-app'].servlet.filter( 
      object => 
        object['init-param'].dataStoreLogLevel === 'production' 
        && parseFloat(object['init-param'].dataStoreLogFileSize) >= 1 // change this to 10 for fileSize >= 10GB
    );
    
    console.log('Servlet Details Test', foo);