JSON Parser Error 783: unexpected token at for params
Asked Answered
F

2

9

I am editing a resource - @article - and whenever I submit it I get the following error:

JSON::ParserError in ArticlesController#update
783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'

It has highlighted this line:

  if @article.update(article_params)

Which is the normal Rails boilerplate code in my Article#Update action:

  def update
    respond_to do |format|
      if @article.update(article_params)
        format.html { redirect_to @article, notice: 'Article was successfully updated.' }
        format.json { render :show, status: :ok, location: @article }
      else
        format.html { render :edit }
        format.json { render json: @article.errors, status: :unprocessable_entity }
      end
    end
  end

Here is the full output from the server logs (including the params):

Started PATCH "/articles/welcome-to-ftja" for ::1 at 2020-05-04 02:11:43 -0500
Processing by ArticlesController#update as HTML
  Parameters: {"authenticity_token"=>"0pO56DaVEiWLX3iE3HNHRKsAPOK2z4RmUaH3jal5rOZjk7zYeoaSru9xOE9GYzLckTbnrVrz4ihXrc1hWcXzXA==", "article"=>{"title"=>"Welcome to FTJA!!", "featured"=>"true", "image"=>"#<ImageUploader::UploadedFile:0x00007fb154adb508>", "body"=>"<h1>Yet another great article.</h1><div>Test <strong>bold</strong> <em>italic</em> <del>strikethrough<br><br></del><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcJ2YXJpYXRpb24ifX0=--5b3d481c22cafd1ff8db36c1b24e57d8788d2217/cowork-4.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Coworking.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;cowork-4.jpg&quot;,&quot;filesize&quot;:82497,&quot;height&quot;:768,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;_ZXhwaXJlc19pbgY7AFRJIgxwdXJwb3NlBjsAVEkiD2F0dGFjaGFibGUGOwBUSSIPZXhwaXJlc19hdAY7AFQw--e56d2e422&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--6d89ec207ef10c8e48577a5e9a170a8d178a9338/cowork-4.jpg&quot;,&quot;width&quot;:752}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Coworking.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--6d89ec207ef10c8e48577a5e9a170a8d178a9338/cowork-4.jpg\" width=\"752\" height=\"768\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Coworking.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Coworking.</figcaption></figure><br><br><br><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2F-5b3d481c22cafd1ff8db36c1b24e57d8788d2217/article-1.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Working, working, working.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;article-1.jpg&quot;,&quot;filesize&quot;:83730,&quot;height&quot;:800,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;BAh7CEkiCGdpZAY6BkVU--d99eadb00dd5ae6bb4220f5781b2946c2171604f&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5c31ee2db4a2660d4a674dfb54375fda30251d3d/article-1.jpg&quot;,&quot;width&quot;:1200}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Working, working, working.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9i6IkJBaDdCam9VY21WemFYcGxYM1J2WDJ4cGJXbDBXd2RwQWdBRWFRSUFBdz09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--5b3d481c22cafd1ff8db36c1b24e57d8788d2217/article-1.jpg\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Working, working, working.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Working, working, working.</figcaption></figure><br><br><br></div>", "user_id"=>"1", "category_list"=>["", "Business", "Real Estate"]}, "commit"=>"Update Article", "id"=>"welcome-to-ftja"}
  Article Load (2.1ms)  SELECT "articles".* FROM "articles" WHERE "articles"."slug" = $1 LIMIT $2  [["slug", "welcome-to-ftja"], ["LIMIT", 1]]
  ↳ app/controllers/articles_controller.rb:73:in `set_article'
   (2.1ms)  BEGIN
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
  ActionText::RichText Load (4.0ms)  SELECT "action_text_rich_texts".* FROM "action_text_rich_texts" WHERE "action_text_rich_texts"."record_id" = $1 AND "action_text_rich_texts"."record_type" = $2 AND "action_text_rich_texts"."name" = $3 LIMIT $4  [["record_id", 1], ["record_type", "Article"], ["name", "body"], ["LIMIT", 1]]
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
   (1.3ms)  ROLLBACK
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
Completed 500 Internal Server Error in 27ms (ActiveRecord: 9.4ms | Allocations: 5092)



JSON::ParserError (783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'):

app/controllers/articles_controller.rb:50:in `block in update'
app/controllers/articles_controller.rb:49:in `update'

If you notice the category_list in the params, I believe that may be causing it:

"category_list"=>["", "Business", "Real Estate"]},

Based on some Googling I have done, it could be the empty string "" that is throwing some JSON Parsing for a loop.

One suggestion I found was to change the Cookie Serializer to :hybrid, like so:

Rails.application.config.action_dispatch.cookies_serializer = :hybrid

I tried that and restarted the server and no luck.

What could be causing this and how can I fix it?

Edit 1

At the console on the error page, I tried the following as well:

>> article_params[:category_list]
=> ["", "Business", "Real Estate"]
>> article_params[:category_list].to_json
=> "[\"\",\"Business\",\"Real Estate\"]"
>> @article.image
=> #<ImageUploader::UploadedFile storage=:store id="3b96dc3198098a9f57ff2b00a2cdb252.jpg" metadata={"filename"=>"article-3.jpg", "size"=>99083, "mime_type"=>"image/jpeg"}>

Edit 2

I am using SimpleForm to handle my forms and the truncated version of this particular form looks like this:

<%= simple_form_for article, html: {multipart: true} do |f| %>
   <%= f.input_field :title, placeholder: "Title", class: "form-control" %>
   <%= f.rich_text_area :body, class: 'form-control customized-min-height', placeholder: "Enter your article body here..." %>
   <%= f.input :user_id, as: :hidden, input_html: { value: current_user.id } %>

   <%= f.input_field :category_list, collection: ActsAsTaggableOn::Tag.all.pluck(:name), input_html: { value: article.category_list.join(","), class: "custom-control-input" }, as: :check_boxes %>

      <%= f.button :submit, class:"btn btn-primary" %>
<% end %>

The above form only produces the "" when I go to Articles#Edit

This is my Articles#Edit controller action:

  # GET /articles/1/edit
  def edit
  end

How do I fix this?

Edit 3

Ok I eventually got the form to not return that empty string by adding include_blank: false and include_hidden: false like so:

<%= f.input_field :category_list, collection: ActsAsTaggableOn::Tag.all.pluck(:name), input_html: { value: article.category_list.join(","), class: "custom-control-input" }, as: :check_boxes, include_blank: false, include_hidden: false %>

Which generates params that look like this:

>> article_params
=> <ActionController::Parameters {"title"=>"Welcome!!", "body"=>"<h1>Yet another great article.</h1><div>Test <strong>bold</strong> <em>italic</em> <del>strikethrough<br><br></del><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBd2217/cowork-4.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Coworking.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;cowork-4.jpg&quot;,&quot;filesize&quot;:82497,&quot;height&quot;:768,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;BAhaac&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eya9338/cowork-4.jpg&quot;,&quot;width&quot;:752}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Coworking.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/representations/e88d2217/cowork-4.jpg\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Coworking.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Coworking.</figcaption></figure><br><br><br><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJ8d2217/article-1.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Working, working, working.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;article-1.jpg&quot;,&quot;filesize&quot;:83730,&quot;height&quot;:800,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;B1604f&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyd3d/article-1.jpg&quot;,&quot;width&quot;:1200}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Working, working, working.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/blobs/eyd3d/article-1.jpg\" width=\"1200\" height=\"800\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Working, working, working.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Working, working, working.</figcaption></figure><br><br><br></div>", "featured"=>"true", "user_id"=>"1", "image"=>"#<ImageUploader::UploadedFile:0x00007fd18d61b1e0>", "category_list"=>["Business", "Real Estate", "Investing"]} permitted: true>

But I am still getting the same error. So it seems there is another culprit.

Fungi answered 4/5, 2020 at 7:21 Comment(3)
I wish people would post questions like yours - valid and complete information. It makes the answers way easier.Rondarondeau
Thanks for the kind words @tukan. I still get dinged from the SO mods from time to time, so a work in progress I guess?Fungi
Yes considering your edit 3 ruling out the "". Makes me more sure it is the simpleform plugin and upload. I will try see if I can find any more details on getting it fixed.Reliquiae
F
8

After much researching and what feels like infinity trial and error I stumbled upon the fix.

Basically, what seems to be happening is whenever the form currently has an image and is being edited, if the existing image isn't handled properly then it converts the cached_image data into a string. You can see a better explanation here.

The culprit turned out to be this line in my form:

<%= f.input :image, as: :hidden, value: f.object.cached_image_data %>

Once I changed it to the following it worked like a charm:

<%= f.input :image, as: :hidden, input_html: { value: f.object.cached_image_data } %>
Fungi answered 8/5, 2020 at 6:21 Comment(0)
R
0

Looking at the error message

783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'

It seems it never gets to the empty string (Even if that as well might give you error). It has trouble parsing the ImageUploader parameter.

Reading from others with this error it seems that this might be connected to a plugin? And the parsing and converting of this data fails.

As far as I understand you add an image or so in the rich text field of your simple_form based form. And when it tries to convert the image to json it fails.

So I suggest looking at any gem you have regarding image upload maybe? I am unable to find any similar issue on Simple_form github so I am thinking uploader part is not within simple_form itself. But getting help from Simple_form developers via issue might be a good way to solve this.

Reliquiae answered 6/5, 2020 at 10:55 Comment(1)
I have updated my question with more code. I would love a specific answer, with details, that fixes this problem. Thanks!Fungi

© 2022 - 2024 — McMap. All rights reserved.