Linux — скрипт для поиска строки, которая не является форматом JSON

#json #linux

#json #linux

Вопрос:

У меня есть следующий файл, каждая строка которого является JSON форматом.

 {"id": 123, "name": "Tom"}
{"id": 124, "name": "Jerry"}
{"id": 125, "name": "Ken"}
...
...# there are 200000 rows in this file
  

В некоторых строках JSON может быть неправильно сформирован. Может содержать либо символ новой строки, либо кавычки неправильно закрыты. Или могут быть другие причины.

Как я могу найти эти строки в Linux более эффективно, кроме ручной проверки построчно 200000 раз?

Комментарии:

1. Отредактируйте свой вопрос, чтобы показать точный текст сообщения об ошибке, которое вы получаете в данный момент. Удачи.

Ответ №1:

Вы можете перебирать строки файла и проверять их на достоверность с помощью jq :

 #!/bin/bash
linenum=1
while IFS="" read -r line
do
    echo "$line" | jq > /dev/null 2>amp;1
    if [ "$?" -ne 0 ]; then
        echo "invalid json on line $linenum"
        echo "$line"
    fi
    linenum=$((linenum   1))
done < data.txt