json-bigint, 支持bigints的json parse/stringify

分享于 

6分钟阅读

GitHub

  繁體 雙語
JSON.parse/stringify with bigints support
  • 源代码名称:json-bigint
  • 源代码网址:http://www.github.com/sidorares/json-bigint
  • json-bigint源代码文档
  • json-bigint源代码下载
  • Git URL:
    git://www.github.com/sidorares/json-bigint.git
    Git Clone代码到本地:
    git clone http://www.github.com/sidorares/json-bigint
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/sidorares/json-bigint
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    json

    Build StatusNPM

    使用bigints支持的json/stringify。基于 Douglas Crockford JSON.js 包和 bignumber.js 库。

    虽然大多数JSON解析器假定数值具有与IEEE双精度相同的精度限制,但是JSON规范不会说任何关于数字精度的值。 十进制( 科学科学的) 表示法中的任何浮点数都是有效的JSON值。 在 JSON api中,序列化可能掉出IEEE精度的值,这是一个好主意,但是, {"value" : 9223372036854775807} 例如仍然是有效的RFC4627 JSON字符串,在大多数JS运行库中,JSON.parse的结果是这里对象: { value: 9223372036854776000 }

    ========= =

    例如:

    var JSONbig =require('json-bigint');var json ='{"value" : 9223372036854775807,"v2": 123 }';console.log('Input:', json);console.log('');console.log('node.js bult-in JSON:')var r =JSON.parse(json);console.log('JSON.parse(input).value : ', r.value.toString());console.log('JSON.stringify(JSON.parse(input)):', JSON.stringify(r));console.log('nnbig number JSON:');var r1 =JSONbig.parse(json);console.log('JSON.parse(input).value : ', r1.value.toString());console.log('JSON.stringify(JSON.parse(input)):', JSONbig.stringify(r1));

    输出:

    
    Input: {"value" : 9223372036854775807,"v2": 123 }
    
    
    
    node.js bult-in JSON:
    
    
    JSON.parse(input).value : 9223372036854776000
    
    
    JSON.stringify(JSON.parse(input)): {"value":9223372036854776000,"v2":123}
    
    
    
    big number JSON:
    
    
    JSON.parse(input).value : 9223372036854775807
    
    
    JSON.stringify(JSON.parse(input)): {"value":9223372036854775807,"v2":123}
    
    
    
    

    命令行选项

    解析器的行为通过'选项'有些可以配置'

    命令行选项严格,布尔值,默认

    指定在分析的字符串中报告重复键时,解析应该是"严格"。 缺省值跟在标准json中,类似 JSON.parse,的行为,但覆盖最后一个值,最后一个值被分配给重复键。

    在这样的重复密钥occurances上设置 options.strict = true 将很快失败,从而提前警告你可能丢失的信息。

    例如:

    var JSONbig =require('json-bigint');var JSONstrict =require('json-bigint')({"strict":true});var dupkeys ='{"dupkey":"value 1","dupkey":"value 2"}';console.log('nnDuplicate Key test with both lenient and strict JSON parsing');console.log('Input:', dupkeys);var works =JSONbig.parse(dupkeys);console.log('JSON.parse(dupkeys).dupkey: %s', works.dupkey);var fails ="will stay like this";try {
     fails =JSONstrict.parse(dupkeys);
     console.log('ERROR!! Should never get here');
    } catch (e) {
     console.log('Succesfully catched expected exception on duplicate keys: %j', e);
    }

    输出

    
    Duplicate Key test with big number JSON
    
    
    Input: {"dupkey":"value 1","dupkey":"value 2"}
    
    
    JSON.parse(dupkeys).dupkey: value 2
    
    
    Succesfully catched expected exception on duplicate keys: {"name":"SyntaxError","message":"Duplicate key"dupkey"","at":33,"text":"{"dupkey":"value 1","dupkey":"value 2"}"}
    
    
    
    
    
    命令行选项,布尔值,缺省 false

    指定BigInts是否应作为字符串存储在对象中,而不是存储在默认的BigNumber中。

    注意,这是一个危险行为,因为它破坏了在没有数据类型更改( 因为这将把所有的BigInts转换为be-and-stay字符串)的情况下转换back-and-forth的默认功能。

    例如:

    var JSONbig =require('json-bigint');var JSONbigString =require('json-bigint')({"storeAsString":true});var key ='{"key": 1234567890123456789 }';console.log('nnStoring the BigInt as a string, instead of a BigNumber');console.log('Input:', key);var withInt =JSONbig.parse(key);var withString =JSONbigString.parse(key);console.log('Default type: %s, With option type: %s', typeofwithInt.key, typeofwithString.key);

    输出

    
    Storing the BigInt as a string, instead of a BigNumber
    
    
    Input: {"key": 1234567890123456789 }
    
    
    Default type: object, With option type: string
    
    
    
    
    

    电子邮件链接:


    PAR  SUP  parse  Bigint  
    相关文章