Ошибка синтаксического анализа JSON на допустимом JSON - PullRequest
0 голосов
/ 10 апреля 2019

Вот мой logstash.conf файл:

input {
    http {
        host => "127.0.0.1"
        port => 31311 
        ssl => false
    }
}

filter {
    mutate {
        split => { "[headers][request_path]" => "/"}
        add_field => { "index_id" => "%{[headers][request_path][1]}" }
    }

    ruby { 
        code => "event.set('request_path_length', event.get('[headers][request_path]').length)" 
    }

    if [request_path_length] == 3 {
        mutate {
            add_field => { "document_id" => "%{[headers][request_path][2]}" }
        }
    }
}

output {
    stdout {
        codec => "json"
    }

    if [request_path_length] == 3 {
        elasticsearch {
            hosts => "http://localhost:9200"
            index => "%{index_id}"
            document_id => "%{document_id}"
        }
    }
    else {
        elasticsearch {
            hosts => "http://localhost:9200"
            index => "%{index_id}"
        }
    }
}

Вот команда, которую я выполнил в PowerShell:

PS C:\Users\Me\Downloads\curl-7.64.1-win64-mingw\bin> .\curl.exe -H "content-type:application/json" -XPUT 'http://127.0.0.1:31311/bo
ok/1' -d @"
>> {"IndexId":"Book","DocumentId":"0","Title":"EKQXAQQSZAAUKVLKVHXAB","Edition":1,"Author":{"Name":"Mark Twain","Nationality":"France"},"Pu
blisher":{"Name":"Harper Collins","HeadquartersAddress":{"Country":"Denmark","StreetName":"KRQAQIKTUTMTZ","PostalCode":"4539","State":"WOOS
ESVGWIJDZSZ"}}}
>> "@

Вот что я вижу в своем терминале LogStash:

[2019-04-10T12:36:00,232][ERROR][logstash.codecs.json     ] JSON parse error, original data now in message field {:error=>#<LogStash::Json::ParserError: Unexpected character ('I' (code 73)): was expecting double-quote to start field name
 at [Source: (String)"{IndexId:Book,DocumentId:0,Title:EKQXAQQSZAAUKVLKVHXAB,Edition:1,Author:{Name:Mark Twain,Nationality:France},Publisher:{Name:Harper Collins,HeadquartersAddress:{Country:Denmark,StreetName:KRQAQIKTUTMTZ,PostalCode:4539,State:WOOSESVGWIJDZSZ}}}"; line: 1, column: 3]>, :data=>"{IndexId:Book,DocumentId:0,Title:EKQXAQQSZAAUKVLKVHXAB,Edition:1,Author:{Name:Mark Twain,Nationality:France},Publisher:{Name:Harper Collins,HeadquartersAddress:{Country:Denmark,StreetName:KRQAQIKTUTMTZ,PostalCode:4539,State:WOOSESVGWIJDZSZ}}}"}
{"message":"{IndexId:Book,DocumentId:0,Title:EKQXAQQSZAAUKVLKVHXAB,Edition:1,Author:{Name:Mark Twain,Nationality:France},Publisher:{Name:Harper Collins,HeadquartersAddress:{Country:Denmark,StreetName:KRQAQIKTUTMTZ,PostalCode:4539,State:WOOSESVGWIJDZSZ}}}","document_id":"1","@version":"1","@timestamp":"2019-04-10T12:36:00.233Z","index_id":"book","request_path_length":3,"tags":["_jsonparsefailure"],"headers":{"content_type":"application/json","request_path":["","book","1"],"http_accept":"*/*","http_version":"HTTP/1.1","content_length":"242","request_method":"PUT","http_user_agent":"curl/7.64.1","http_host":"127.0.0.1:31311"},"host":"127.0.0.1"}

Я не уверен, почему произошел сбой анализа JSON - мой образец JSON проходит тест проверки здесь .

Как я могу исправить эту проблему?

UPDATE:

Я выполнил немного другую команду:

PS C: \ Users \ Me \ Downloads \ curl-7.64.1-win64-mingw \ bin>. \ Curl.exe -H "content-type: application / json" -XPUT 'http://127.0.0.1:31311/bo ok / 1' -d '{\ "IndexId \": \ "Book \", \ "DocumentId \": \ "0 \", \ "Title \": \ "EKQXAQQSZAAUKVLKVHXAB \", \ "Edition \": \ "1 \ "\ "Автор \": {\ "Имя \": \" Марк Twai n \ ", \" Национальность \ ":" Франция \ "}, \" Издатель \ ": {\" Имя \ ": \" Харпер Коллинз \», \ "HeadquartersAddress \": {\ "Страна \": \ "Дания \", \ "StreetName \": \ "KRQAQIKTUTMTZ \", \ "PostalCode \": \ "4539 \", \ "государство \": \ "WOOSESVGWIJDZSZ \"}}} '

На этот раз я увидел это сообщение об ошибке в моем терминале LogStash:

[2019-04-10T12:53:03,799][ERROR][logstash.codecs.json     ] JSON parse error, original data now in message field {:error=>#<LogStash::Json::ParserError: Unexpected end-of-input: was expecting closing quote for a string value
 at [Source: (String)"{"IndexId":"Book","DocumentId":"0","Title":"EKQXAQQSZAAUKVLKVHXAB","Edition":"1","Author":{"Name":"Mark"; line: 1, column: 207]>, :data=>"{\"IndexId\":\"Book\",\"DocumentId\":\"0\",\"Title\":\"EKQXAQQSZAAUKVLKVHXAB\",\"Edition\":\"1\",\"Author\":{\"Name\":\"Mark"}
{"message":"{\"IndexId\":\"Book\",\"DocumentId\":\"0\",\"Title\":\"EKQXAQQSZAAUKVLKVHXAB\",\"Edition\":\"1\",\"Author\":{\"Name\":\"Mark","tags":["_jsonparsefailure"],"@version":"1","@timestamp":"2019-04-10T12:53:03.813Z","headers":{"http_version":"HTTP/1.1","http_user_agent":"curl/7.64.1","content_length":"103","request_method":"PUT","http_accept":"*/*","request_path":["","book","1"],"content_type":"application/json","http_host":"127.0.0.1:31311"},"host":"127.0.0.1","index_id":"book","document_id":"1","request_path_length":3}

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуйте использовать:

{\"IndexId\":\"Book\",\"DocumentId\":\"0\",\"Title\":\"EKQXAQQSZAAUKVLKVHXAB\",\"Edition\":\"1\",\"Author\":{\"Name\":\"Mark Twai n\",\"Nationality\":\"France\"},\"Publisher\":{\"Name\":\"Harper Collins\",\"HeadquartersAddress\":{\"Country\":\"Denmark\",\"StreetName\":\"KRQAQIKTUTMTZ\",\"PostalCode\":\"4539\",\"State\":\"WOOSESVGWIJDZSZ\"}}}

Обратите внимание на двойную кавычку до того, как Франция не была экранирована, и в значении StreetName перед первой двойной кавычкой был ошибочный пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...