Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2015-12-06 #18

Open
yorkie opened this issue Dec 6, 2015 · 2 comments
Open

2015-12-06 #18

yorkie opened this issue Dec 6, 2015 · 2 comments
Labels

Comments

@yorkie
Copy link
Owner

yorkie commented Dec 6, 2015

typify-json

今天完成了一个新库:https://github.com/weflex/typify-json ,创造这个库的原因起于 Fibula.js 的开发过程中,我使用了如下的代码:

const exec = require('child_process').execSync;
exec(`mongo --eval "db.foo.insert(${JSON.stringify(input)})"`);

如果input的值包含有Date这样的值,那么JSON.stringify的时候就会默认地把Date转换成字符串再插入数据库中了,这个不是我们想要的结果。

因此,typify-json 使用了与JSON类似的 API:

const typifyJSON = require('typify-json');
const exec = require('child_process').execSync;
exec(`mongo --eval "db.foo.insert(${typifyJSON.stringify(input)})"`);

这样如果我们输入:

{
  "date": new Date()
}

那它等价于如下的"Shell语句":

> db.foo.insert({"date":new Date()})

在开发这个库的过程中,我尝试过很多方案:

  1. 使用JSON.stringify(input, replacer)的方式去重写,不过后来发现最后我所需要的并不是一个标准的 JSON,因此无法通过这种方法得出;
  2. 在上一个方案未果后,决定试试Date的值使用一个特殊的散列值存储在一个WeakMap内,然后在最后使用正则换掉,不过这种方法不够直观简单,WeakMap的API也不够稳定,于是作罢。

在尝试方法2时,还发现了JSON.stringifyreplacer函数有一个比较奇怪的特性,比如以下代码:

JSON.stringify({
  foo: {
    date: new Date()
  }
}, function (key, val) {
  console.log(key, val);
});

key为"date"的时候,发现对应的val已经不是一个字符串类型了,所以只能在上一层,即key等于"foo"的时候,来判断。

@yorkie yorkie added the Diary label Dec 6, 2015
@geekplux
Copy link

geekplux commented Dec 7, 2015

为什么写在issues里啊,我觉得可以用org-mode写,然后导出html,放在github上,你看我的:

http://geekplux.com/wiki/

我也是刚开始写

@yorkie
Copy link
Owner Author

yorkie commented Dec 7, 2015

有几个原因吧:

  1. 你给的链接类似于一本书了,用git管理是对的,日记的话,我觉得不存在版本问题,都是一次性的
  2. 这里比较方便吧,主要是想用一些自带的功能,比如可以列出一些完成的PR,会有链接

org-mode 虽然好用,但是支持还是不够,我现在还是只是在团队内部的 wiki 用那个啦~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants