Я пытаюсь перебрать каждый элемент 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.info(j[key]);
}
То, что сказал @ ÁlvaroGonzález, правда, плюс после того, как вы использовали JSON.parse(), вы, скорее всего, захотите зацикливаться на Object.keys(j), а не на j напрямую.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны проанализировать строку и преобразовать ее в объект 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.info(obj[key]);
}
}
SyntaxError: JSON.parse: неожиданный непробельный символ после данных JSON в строке 2, столбец 1 данных JSON в строке 10
Как сказал Матиас в своем ответе, предоставленный вами JSON недействителен. Я этого не проверял. Это причина ошибки.
Это недействительно, и это не объект, а массив объектов! : D
Ага, забыл сменить лог j[key] на obj[key]. Теперь это работает.
Очевидно, вы повторяете символы данной строки. Эта строка имеет формат JSON, но по-прежнему представляет собой массив символов.
Кроме того, ваш 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.info(key, ' = ', o[key])@JunedAnsari Нет, чтобы автоматически исправить это: D Я исправил это вручную, другого способа сделать это нет.
@JunedAnsari Уточнение: как указывает другой ответ, когда я сказал нет автофиксации, я имел в виду, что вам нужно реализовать исправление самостоятельно. В моем случае, чтобы ответить вам, я исправил вручную. В любом случае, я считаю, что исправление JSON выходит за рамки вашего вопроса.
Когда я отформатировал вашу строку, я заметил следующее:
{
"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.info(parsedValue)Даже когда OP пометил ваш ответ как решение, это не так. OP пытался перебрать свойства из строки, и ваш ответ ничего об этом не говорит. И тот, и мой уже делают это ...
@ MatíasFidemraizer хорошо, я понял, что как только строка будет проанализирована, OP сможет перебирать ее?
@ MatíasFidemraizer, и я также считаю, что вопрос гласит, что OP должен проанализировать строку: - «невозможно проанализировать объект json»
Я так не думаю. Я действительно считаю, что OP хотел найти решение, чтобы избежать собственных усилий ... Проблема, описанная во всем вопросе, связана с путаницей строки с объектом, а также - но только мелочью - JSON был недействительным. В любом случае, я не ожидаю, что кто-то попросит превратить нас в человеческий JSON-линтер: D
@ MatíasFidemraizer представленная строка выглядит как строка ответа; из вызова API или из других источников. Заголовок вопроса, а также упоминание об отказе JSON.parse(), я мог только сделать вывод, что OP может запрашивать способ анализа этого «типа» строк.
Что произойдет, если у вас есть такая недвижимость, как "Message": "SyncData: LocalConnectionString = Data Source=PARAM\\MSSQL2K8r2;Initial Catalog=HQPharma;User ID=sa;Password=developer;\nThis is just a string message"?
@ChatterOne не сработает. Представленное решение работает только для представленной проблемы.
Это классическая путаница между форматом данных JSON и объектами JavaScript. У вас есть нить, и вы никогда не анализируете его как JSON, поэтому вы просто зацикливаете его символы.