PowerJSON - 由 JSON 改进的数据交换格式。

2019-10-15 14:35:13 +08:00
 18510047382

PowerJSON

Powerjson 是由 JSON 改进而成的数据交换格式,它将 JSON 支持了部分 JavaScript 语法,使其更加高效可用,并且解决了许多 JSON 历史遗留下来的问题。

它支持 单引号字符串, 多行字符串, 注释, 运算符, 导入文件, 导入其它 PJSON 文件 等。

Simple Demo

{
    // 字符串
    helloText: 'hello world',
    MultiLineText: `
        Welcome
        to
        PowerJSON!
    `,

    // 文件和导入
    myFile: new File('./file.txt'),
    importPJSONFile: new PJSON('./index2.pjson'),
    getFile: new GET('http://cn.powerjson.org'),

    // 运算符
    tenDaySeconds: 60 * 60 * 24 * 10

    // 这里是注释!
    /* 注释 2 */
}

生态系统

聊天室

为什么不加入我们的在线 PowerJSON CN Gitter 聊天室

仓库

PowerJSON 在 Github / Gitee / NPM 上托管仓库。

兼容性

PowerJSON 支持所有兼容 ES6浏览器 / js 运行时

浏览器:

Node.js:

文档

访问 powerjson.org 查看我们的在线实例和 教程

变更日志

每次发行版的细节和变更记录请访问 Github 上的 发行日志

协议

MIT

Copyright (c) 2019-present, Yingxuan (Bill) Dong

9021 次点击
所在节点    JavaScript
101 条回复
blanu
2019-10-15 14:39:18 +08:00
数据交换不仅仅要考虑 JS,没有其他语言很难用上,而且你这种语法在很多语言里根本无法实现
18510047382
2019-10-15 14:45:02 +08:00
@blanu 为什么语法在别的语言就无法实现?请你详细说说
Hanggi
2019-10-15 14:47:58 +08:00
@18510047382 人家的意思应该是没有看起来那么好吧?
18510047382
2019-10-15 14:56:07 +08:00
@Hanggi 我其实感觉这里面的语法都是通用的,注释、new、字符串等等等在许多语言的书写方式都是一样的
telung
2019-10-15 15:01:24 +08:00
JSON 支持文件导入有什么鬼用?你给大家解释一下
chendy
2019-10-15 15:03:45 +08:00
看了下楼主的发帖纪录…造轮爱好者啊…
markgor
2019-10-15 15:08:26 +08:00
我再 chrome 的 console 試了下:
console.log({
// cmd 123123
helloText:'abcdefg',
mlText:"asdf\nasdf",
/*testtest*/
abc:123,
tst:1*2*3*4
});

返回:
abc: 123
helloText: "abcdefg"
mlText: "asdf↵asdf"
tst: 24
__proto__: Object


請問為什麼需要用 PJSON ?

我直接用 JSON 他不香哦
----------------------------------
然後看到你說的數據交換,
也看了你的文檔和說明,
但未找到具體怎麼轉換。
所以想問問你交換的時候他是怎麼交換?




另外,最實際的一個問題,

在 JS 裡,我 var a={xxx:123}就是 JSON 對象了,直接 ajax 就提交去後端了,
在 php 裡我使用 json_encode(array);就能輸出 JSON 對象,JS 直接就能使用了,
在 C#裡我引用個 fastJson 就可以了。

請問如果替換成 PJSON,對我而言是簡化了哪裡呢?
18510047382
2019-10-15 15:10:26 +08:00
@telung 实现模块化
hiluxi
2019-10-15 15:12:22 +08:00
术业有专攻,json 就是用来存储数据的,何必多此一举在里面搞编程语言支持呢?
dyllen
2019-10-15 15:14:02 +08:00
json 不就为了简单吗?搞这么复杂。。。
18510047382
2019-10-15 15:16:17 +08:00
@markgor 首先 JSON 是不支持 comment、运算符等等的,你所使用的是 JavaScript 对象,并不是严格的 JSON,推荐你看看 json.org 的一些规范,如果你用你把你刚才 object 转换成字符串,再用 JSON.parse 解析会解析不了的。
JSON.parse(`
{
// cmd 123123
helloText:'abcdefg',
mlText:"asdf\nasdf",
/*testtest*/
abc:123,
tst:1*2*3*4
}
`)
直接报错:VM75:3 Uncaught SyntaxError: Unexpected token / in JSON at position 3
at JSON.parse (<anonymous>)
at <anonymous>:1:6

另外你说的 ajax 提交是不能直接提交 JavaScript Object 的,他需要使用 JSON.stringify 转换成字符串才能通过 GET、POST 请求发送,而你刚才的那些代码是没办法转换成 json 字符串的
18510047382
2019-10-15 15:19:03 +08:00
@dyllen 推荐你先掌握一下注释等等的重要性,这对个人来说不写注释可能没什么,但是对团队来说注释是非常重要的,而 json 不支持注释等等内容,对团队协作是非常不方便的
18510047382
2019-10-15 15:19:35 +08:00
@hiluxi 推荐你也先掌握一下注释等等对团队协作的重要性
angusun
2019-10-15 15:20:40 +08:00
没有 get 到痛点,所以也无法知道是否变得更好用了。
blackcurrant
2019-10-15 15:21:49 +08:00
挺好的,支持这种创新,虽然不一定有卵用。
18510047382
2019-10-15 15:23:18 +08:00
@angusun json 还有什么另外的痛点吗?除了 PJSON 改进的这些内容
markgor
2019-10-15 15:23:21 +08:00
JSON 是不支持 comment、运算符等等的,你所使用的是 JavaScript 对象
如果你用你把你刚才 object 转换成字符串,再用 JSON.parse 解析会解析不了的。
請問 PJSON 是不是也是 JS 對象?
PJSON.parse(PJSON.stringify({
/*asdfasdf*/

a:1
}));

請問結果是什麼?


另外你说的 ajax 提交是不能直接提交 JavaScript Object 的,他需要使用 JSON.stringify 转换成字符串才能通过 GET、POST 请求发送,而你刚才的那些代码是没办法转换成 json 字符串的

var a = {
// cmd 123123
helloText:'abcdefg',
mlText:"asdf\nasdf",
/*testtest*/
abc:123,
tst:1*2*3*4
};
var b= JSON.parse(a);

ajax 提交這個 b 可以了吧?
但是 PJSON 是可以簡化哪一步呢?

還有各種語言對 JSON 的支持和支持庫你也可以上 json.org 看看。
如果換成 PJSON,請問支持庫是有...?


最後一問,
文檔中說 PJSON 最厲害是加入了運算支持,
請問可以把 JS 的計算精度問題修復下嗎?

PJSON.stringify({a:0.1+0.1+0.1});
"{"a":0.30000000000000004}"
18510047382
2019-10-15 15:26:21 +08:00
@markgor pjson 简化的是 parse 的步骤,是通过字符串解析成对象的步骤,而你说的都是 stringify 的东西,这些东西并没有必要简化啊。

另外推荐你先学好基础,你的:

var a = {
// cmd 123123
helloText:'abcdefg',
mlText:"asdf\nasdf",
/*testtest*/
abc:123,
tst:1*2*3*4
};
var b= JSON.parse(a);

执行之后报错:

VM199:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at <anonymous>:9:13

应该是 var b = JSON. stringify(a)
18510047382
2019-10-15 15:26:39 +08:00
@blackcurrant 试试就知道了嘛
markgor
2019-10-15 15:31:28 +08:00
@18510047382 简化的是 parse 的步骤,parse 哪裡簡化了,
另外可以不要避重就輕,回答下嗎。

看完你的文檔和你所說的東西,
我是真的不知道究竟能幫我減少什麼工作?
或者是不知道哪個地方可以使用它?
你可以參考上面別人的回復,
你可以明確的說出使用上它,在哪些地方是方便了?或者舉個實例也好啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX