Coder Social home page Coder Social logo

Comments (3)

trentm avatar trentm commented on June 24, 2024 1

[email protected] released today with this fix. Thanks.
https://www.npmjs.com/package/json

from json.

trentm avatar trentm commented on June 24, 2024

Thanks! Sorry for the delay.

Well, actually I don't understand why we need to call _parseString function, I think directly use -d argument input as delimiter is enough 🤔

This was added in #26 to support handling escapes. Specifically the example case was to handle wanting TSV output, e.g.:

% echo '{"a" : 1, "b" : "foo"}' | json -ad '\t' a b
1	foo

without that patch:

% echo '{"a" : 1, "b" : "foo"}' | ./lib/json.js -ad '\t' a b
1\tfoo

The fix from 418sec#1 looks sufficient -> #150

from json.

trentm avatar trentm commented on June 24, 2024

Actually that fails tests. Specifically the issue is that with eval(...) we are handling JavaScript escapes (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#escape_notation) and with JSON.parse(...) we are handling only JSON escapes (https://tools.ietf.org/html/rfc7159#section-7), which is a subset. Some escapes in JS that aren't allowed in JSON are:

  • \0 for the null byte, which is the case that broke tests (see below)
  • \u{X}…\u{XXXXXX}
  • \xXX
  • \'

For example, with current code:

% echo '[{"name":"trent","age":38},{"name":"ewan","age":4}]' | json -a name age -d "\'"
trent'38
ewan'4
% echo '[{"name":"trent","age":38},{"name":"ewan","age":4}]' | json -a name age -d "\0" | xargs -0
trent 38
ewan 4

and with the patch from #150 using JSON.parse:

% echo '[{"name":"trent","age":38},{"name":"ewan","age":4}]' | ./lib/json.js -a name age -d "\'"
json: error: Unexpected token ' in JSON at position 2
[18:13:17 trentm@purple:~/tm/json (git:master rv:1)]
% echo '[{"name":"trent","age":38},{"name":"ewan","age":4}]' | ./lib/json.js -a name age -d "\0" |
xargs -0
json: error: Unexpected number in JSON at position 2

I think ultimately using JSON.parse is a satisfactory change (supporting only JSON escapes in a tool called json sounds fine), with the requirements that I:

  • release as a new major ver because backward compat is broken
  • add a note to the docs on how to specify a null byte
% echo '[{"name":"trent","age":38},{"name":"ewan","age":4}]' | ./lib/json.js -a name age -d "\u0000" | xargs -0
trent 38
ewan 4

from json.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.