Как добавить / добавить данные в файл JSON с помощью Ruby - PullRequest
1 голос
/ 20 апреля 2019

Поэтому я пытаюсь добавить информацию в мой файл .json, имя и фамилию, просто запустив скрипт через терминал в kali linux.

У меня не было большого прогресса, япоследние 5 часов искали в Интернете, чтобы найти способ исправить это, но особого прогресса достигнуто не было.Что оставляет меня здесь, чтобы опубликовать это, кто-нибудь знает, как исправить эту ошибку?

  • Ошибка с терминала
Traceback (most recent call last):
        4: from /root/Desktop/JSON_thingy.rb:8:in `<main>'
        3: from /root/Desktop/JSON_thingy.rb:8:in `open'
        2: from /root/Desktop/JSON_thingy.rb:9:in `block in <main>'
        1: from /usr/lib/ruby/vendor_ruby/json/common.rb:156:in `parse'
/usr/lib/ruby/vendor_ruby/json/pure/parser.rb:118:in `parse': source in not valid JSON! (JSON::ParserError)
  • Код
require 'json'
require 'json/pure'

json = {"first_name" => "john", "last_name" => "doe"}

initial_json = File.read('/root/Desktop/jsonDatabase.json')

File.open("/root/Desktop/jsonDatabase.json","w") do |f|
  f.puts JSON.pretty_generate(JSON.parse(initial_json) << json )
end 
  • JSON
[
{
 "first_name": "albert",
 "last_name": "einstein"
},
{
 "first_name": "edgar",
 "last_name": "poe"
}
]

Ответы [ 2 ]

2 голосов
/ 20 апреля 2019

Конечно, простое объединение двух строк JSON не работает и может привести к неверному JSON. В вашем примере хеш, который вы пытаетесь добавить, не окажется в массиве, а будет позади.

Правильный способ - прочитать существующий файл JSON, проанализировать его в структуре данных RUBY и добавить новый хэш в Ruby в массив, прежде чем записывать все обратно в JSON.

require 'json'

filename = '/root/Desktop/jsonDatabase.json'

hash = { "first_name" => "john", "last_name" => "doe" }

array = JSON.parse(File.read(filename)
array << hash

File.open(filename, 'w') do |f|
  f.write(JSON.pretty_generate(array))
end
1 голос
/ 20 апреля 2019

Предыдущий ответ чище, и я бы рекомендовал использовать это.Тем не менее, ошибка трассировки ясно говорит вам, в чем проблема, эта строка:

/usr/lib/ruby/vendor_ruby/json/pure/parser.rb:118:in `parse': 
source in not valid JSON! (JSON::ParserError)

Часть вашего кода, который допустил ошибку, выглядит так:

JSON.parse(initial_json)

Итак, вам нужно сначалаубедитесь, что данные в файле, который вы загружаете, на самом деле являются действительными JSON.Вы можете использовать jsonlint ruby ​​gem или другие онлайн-линтеры, такие как https://jsonlint.com/, или, если вы утиная утка, используйте эту , любую из которых можно будет "украсить"ваш JSON для вас.

ОБНОВЛЕНИЕ

Если вы используете ruby ​​jsonlint, вы можете получить предупреждение об устаревании, вы можете спокойно его игнорировать.Но это потому, что одна из его зависимостей trollop выдает предупреждение об устаревании.Я открыл запрос на удаление , чтобы исправить это.Но, похоже, его нельзя поддерживать, последний коммит произошел почти 2 года назад.* Вздох

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