代码之家  ›  专栏  ›  技术社区  ›  Juned Ansari

无法分析nodejs中的json对象

  •  0
  • Juned Ansari  · 技术社区  · 7 年前

    我试图迭代json的每个元素,但是打印失败。 我也厌倦了JSON.parse()。

    代码:

    var j = "{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:16.881\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":527,\"Message\":\"SyncData: Billing Software SyncData() called\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.060\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":38,\"Message\":\"SyncData: Start\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.111\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":44,\"Message\":\"SyncData: LocalConnectionString = Data Source=PARAM\\\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;\"}";  
    for(var key in j){
        console.log(j[key]);
    }
    

    上面的代码打印每个字符 enter image description here

    3 回复  |  直到 7 年前
        1
  •  2
  •   Prasanna    7 年前

    当我格式化你的字符串时我注意到

    {
     "Type": "INFO ",
      "TimeStamp": "2018-10-10 12:05:16.881",
      "IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
      "MacId": "84:7B:EB:3F:65:A4",
      "OS": "Microsoft Windows 10 Home Single Language",
      "Method": "SyncData",
      "LineNo": 527,
      "Message": "SyncData: Billing Software SyncData() called"
    }\n{
      "Type": "INFO ",
      "TimeStamp": "2018-10-10 12:05:17.060",
      "IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
      "MacId": "84:7B:EB:3F:65:A4",
      "OS": "Microsoft Windows 10 Home Single Language",
      "Method": "SyncData",
      "LineNo": 38,
      "Message": "SyncData: Start"
    }\n{
      "Type": "INFO ",
      "TimeStamp": "2018-10-10 12:05:17.111",
      "IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
      "MacId": "84:7B:EB:3F:65:A4",
      "OS": "Microsoft Windows 10 Home Single Language",
      "Method": "SyncData",
      "LineNo": 44,
      "Message": "SyncData: LocalConnectionString = Data Source=PARAM\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;"
    }
    

    为了解决这个问题,你可以这样做

    const j = "{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:16.881\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":527,\"Message\":\"SyncData: Billing Software SyncData() called\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.060\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":38,\"Message\":\"SyncData: Start\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.111\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":44,\"Message\":\"SyncData: LocalConnectionString = Data Source=PARAM\\\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;\"}";  
    
    //first remove the \n and join with a comma ,
    // enclose your multiple object within an array
    const joinedWithComma = "[" + j.split('\n').join(',') + "]"
    
    
    //now parse this
    const parsedValue = JSON.parse(joinedWithComma)
    
    
    console.log(parsedValue)
        2
  •  1
  •   Matías Fidemraizer    7 年前

    另外,您的JSON无效。清理之后,我注意到这是一个JSON对象的JSON数组:

    const os = JSON.parse(`[{
    		"Type": "INFO ",
    		"TimeStamp": "2018-10-10 12:05:16.881",
    		"IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
    		"MacId": "84:7B:EB:3F:65:A4",
    		"OS": "Microsoft Windows 10 Home Single Language",
    		"Method": "SyncData",
    		"LineNo": 527,
    		"Message": "SyncData: Billing Software SyncData() called"
    	},
    	{
    		"Type": "INFO ",
    		"TimeStamp": "2018-10-10 12:05:17.060",
    		"IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
    		"MacId": "84:7B:EB:3F:65:A4",
    		"OS": "Microsoft Windows 10 Home Single Language",
    		"Method": "SyncData",
    		"LineNo": 38,
    		"Message": "SyncData: Start"
    	},
    	{
    		"Type": "INFO ",
    		"TimeStamp": "2018-10-10 12:05:17.111",
    		"IP": "2001:0:9d38:90d7:804:3589:8a3c:e43a",
    		"MacId": "84:7B:EB:3F:65:A4",
    		"OS": "Microsoft Windows 10 Home Single Language",
    		"Method": "SyncData",
    		"LineNo": 44,
    		"Message": "SyncData: LocalConnectionString = Data Source=PARAM\\\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;"
    	}
    ]`)
    
    
    for (let o of os)
      for (let key in o)
        console.log(key, ' = ', o[key])
        3
  •  1
  •   oniramarf    7 年前

    您应该解析字符串并使用该方法转换为JSON对象 JSON.parse() .

    我注意到您的字符串有几个JSON对象,所以您应该按 \r\n JSON.parse 方法。

    var j = "{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:16.881\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":527,\"Message\":\"SyncData: Billing Software SyncData() called\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.060\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":38,\"Message\":\"SyncData: Start\"}\r\n{\"Type\": \"INFO \",\"TimeStamp\":\"2018-10-10 12:05:17.111\",\"IP\":\"2001:0:9d38:90d7:804:3589:8a3c:e43a\",\"MacId\":\"84:7B:EB:3F:65:A4\",\"OS\":\"Microsoft Windows 10 Home Single Language\",\"Method\":\"SyncData\",\"LineNo\":44,\"Message\":\"SyncData: LocalConnectionString = Data Source=PARAM\\\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;\"}";
    var list = j.split('\r\n');
    for (var i = 0; i < list.length; ++i) {
      var obj = JSON.parse(list[i]);
      for(var key in obj) {
        console.log(obj[key]);
      }
    }
    
    推荐文章