json 1

yaml概述

yaml容易受机器解析,且人类可读。

立刻是一个弥天大谎吧!

应用冒号分隔键和价值,用中写道表示数组。这虽是有的规则。

小伙都欣赏simple,这是句名言。可以去官网查阅详情,和其余解析库。

yaml示例

yaml:data 
seq: 
- 
  1:yi 
  2:er 
- 
  1:one
  2 :two

js的上上下下代码

/**
 * yaml 解析简单实现
 */
var pos = 0;
/**
 * token
 * @returns
 */
function getNextToken() {
    if (pos == len) {
        return {
            type : "EOF"
        }
    }
    skipSpace();
    var c = yaml[pos];
    if (isString(c)) {
        return getString();
    }

    pos++;
    return {
        val : c,
        type : c
    };
}
/**
 * next but do not changed
 * @param n
 * @returns
 */
function peek(n) {
    skipSpace();
    return yaml[pos]
}
function skipSpace() {
    var c = yaml[pos];
    while (isSpace(c) && pos < len) {
        pos++;
        c = yaml[pos];
    }

}
function isSpace(c) {
    return c == ' ' || c == '\t' || c == '\n'

}
function getString() {
    var c = yaml[pos];
    var str = "";
        //没有考虑转义字符
    while (isString(c) && pos < len) {
        str += yaml[pos];
        pos++;
        c = yaml[pos];
    }

    return {
        val : str,
        type : "str"
    };
}
function isString(c) {
    return !isSpace(c) && !isSpecial(c);
}
function isSpecial(c) {
    return c == ':' || c == '-'
}


//can be simple type kv array
function getYaml() {
    var currentToken = getNextToken();

    while (currentToken.type != "EOF") {

        if (peek() == ':') {
            return getkv(currentToken)
        }
        if (currentToken.type == '-') {
            return getArray();
        }
                //string
        return currentToken.val;
    }

}
//键值对  其后不能是序列符号 
function getkv(currentToken) {
    var yaml = {};

    getNextToken();
    yaml[currentToken.val] = getYaml();
    while (peek() != "-"&&currentToken.type != "EOF") {

        currentToken = getNextToken();

        getNextToken();//check : or thorw error
        yaml[currentToken.val] = getYaml();

    }

    return yaml;
}
function getArray() {
    var a = [];
    a.push(getYaml());
    while (peek() == "-") {
        getNextToken();//check -
        a.push(getYaml());
    }
    return a;
}

var yaml = "yaml:data " + "seq: " + "- 1:yi 2:er " + " - 1:one 2 :two";

var len = yaml.length;
console.log(JSON.stringify(getYaml()))
//{"yaml":"data","seq":[{"1":"yi","2":"er"},{"1":"one","2":"two"}]}

靡错处理,也不曾特别好之卷入,但是有详尽的注释,容易改写和理解。

json结果翻

{"yaml":"data",
 "seq":
      [  {"1":"yi",
           "2":"er"
         },
        {"1":"one",
         "2":"two"
        }
      ]
}

比一下,我个人感觉对于yaml,机器确实容易解析,而可读性并无算是极端好,可写性很好。不理解干什么近来即令火了。

尽量不写简单的以身作则了,可能方法不对,太鄙俗,得做点发出义之业务了[加了几独小时班,却绝非工作战果]。不掌握怎么由约上拿房项目,现在不得不见到代码里面的细节,几乎看不到思想层面的事物。

其实自己前面的概念就是是错误的,没有考虑空格分隔的动静,这里的空格是出语法意义之(两独空格的回落),类似python的语法。

对此让闹之演示正好可以运行。复杂的多少会管后面的目标加于面前的靶子上,类似于if
if
else中之次只else会被吞掉,其实好之做法是运用大括号({}),就是先后块被一致词也助长括号。

骗大家了,解析的结果其实是一无是处的。
那现在安修改昵?首先设定两个空格的缩进,再根据缩进的构造进行读取。isSpace和peek需要改写。getYaml的时光语言增多参数记录时底位置。说实话,我后来尝试改写代码,也远非科学解析,对我的话不好解析…。在网上看了转,Python的剖析,用了瞬间hack,才会正确。

本来者时节实在与丁目处理这样的事物是同等的,需要记忆功能前空格数量。在未曾工具支持,当编辑和看很丰富的文本时,基本属于瞎猜,和读几十重叠的js闭包一样吃人夭折。

yaml的末梢一个长,就是足以用流的措施分析,就是yaml文件之高低几乎可以没有限定,利用buf在没传递了的时节呢得以处理,对纱传递及文书读取特别发意义。这是盖从没开始称和竣工符的原由,当然这些的文书要出肯定的格式要求,就是缩进不能够顶非常。把json或者xml的第一只初步称和结尾的了符去丢,我眷恋我们也足以组织出这么的组织。据说Google
map为了节省流量,用底就是上下一心计划的一样种格式来传递数据,然后自己分析。当然任何人都得根据工作来计划好不过适于的多少格式,但是大情况下这样的利比缺点还多,还是采用通用的较妥善。

近期涌现起无数新物,新技巧之速入门的东西并无能够于人口备感尽兴,又休便于找到好之翻阅材料。
迎阅读本身之另文章。

相关文章

网站地图xml地图