Comments (2)
If you closely compare the code you've put into your browser console, you'll notice it is not the same you have in your Ruby code.
It's a quoting issue. I think your example can be simplified to this:
data = { "foo" => %q(") }
str_to_eval = %Q|JSON.parse('#{data.to_json}')|
puts str_to_eval
which prints: JSON.parse('{"foo":"\""}')
. Which is not a valid JSON string after JS evaluation. You have to keep in mind, that the \
needs to be escaped as well as we want the literal "forward slash". While the previous JS code snippet won't work, but JSON.parse('{"foo":"\\""}')
does. This has nothing to to with mini_racer or Node.js or Chrome.
Depending on your use case, it might be easier to define a function and use Context#call
, so you don't have to worry so much about properly embedding the escaped string into the code.
Alternatively you can do the following. I'm not sure if there is a nicer way to do that, but this works:
data = { 'body' => '{"param1":"some value","param2":"some other value"}' } # your example input
data == JSON.parse(MiniRacer::Context.new.eval(data.to_json.to_json))
=> true
The String#to_json
trick will make sure the String is properly escaped and it will look like this: "{\"body\":\"{\\\"param1\\\":\\\"some value\\\",\\\"param2\\\":\\\"some other value\\\"}\"}"
(everything here is printed as literal characters).
Escaping across so many layers is always confusing 😅 Hope that helps understanding the issue!
from mini_racer.
@tisba thank you for troubleshooting this! ❤️
from mini_racer.
Related Issues (20)
- sq_mini_racer Ruby 3.1 incompatibility (`Psych::DisallowedClass`) HOT 2
- After MacOS Ventura upgrade. gem install works, bundle install does not HOT 2
- Context has no Isolate available anymore HOT 3
- bundler install error HOT 5
- Installing mini_racer 0.6 on docker M1 fails with "make: printf: Argument list too long" HOT 4
- Update default branch to `main` HOT 3
- Gem::Ext::BuildError: ERROR: Failed to build gem native extension (Ruby 2.7.4) HOT 3
- Discuss: Release version 1.0.0 and manage consumer breaking version expectations HOT 3
- Node release catch-up plan HOT 42
- CI Improvements HOT 1
- `Isolate::low_memory_notification` fails to lock Isolate HOT 5
- Error installing mini_racer: ERROR: Failed to build gem native extension HOT 7
- Undefined Conversion
- Segmentation fault when application stops (Ruby 3.2.2, HOT 11
- mini_racer not starting: `ZSt28__throw_bad_array_new_lengthv: symbol not found (LoadError)` HOT 9
- Suggestions for context defaults for server side rendering HOT 4
- Security guarantees? HOT 1
- mini_racer 0.12.0 Segmentation fault on x86_64-linux with libv8-node 21.7.2.0 HOT 74
- Using IO or rescuing exceptions when setting a timeout HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mini_racer.