2017-07-31 72 views
0

我需要解析一个JSON对象一样,但{"f": 1, "i": 2, "g": 5, ...}定期不像JSON对象,输入可以在对象具有零个或一个...野牛零或语法文件一个出现

所以,这是错了对象{"f": 1, "f": 1, "i": 2, ...},因为它有“f两次”的关键。

而且,这个对象很好{"i": 2},因为它只是关键“我”,它不会出现一次以上。

这是我试过的。我知道它不起作用,但我不知道如何设定它是正确的。

RuleMemberList 
    : RuleMember 
     {{$$ = {}; $$[$1[0]] = $1[1];}} 
    | RuleMemberList ',' RuleMember 
     {$$ = $1; $1[$3[0]] = $3[1];} 
    ; 

RuleMember 
    : I ':' RuleString 
      {$$ = [$1, $3];} 
    | G ':' RuleString 
      {$$ = [$1, $3];} 
    | F ':' RuleFinder 
      {$$ = [$1, $3];} 
    | A ':' RuleAction 
      {$$ = [$1, $3];} 
    | T ':' RuleTarget 
      {$$ = [$1, $3];} 
    | P ':' RuleNumber 
      {$$ = [$1, $3];} 
    | C ':' RuleChance 
      {$$ = [$1, $3];} 
    | L ':' RuleLayers 
      {$$ = [$1, $3];} 
    | R ':' RuleString 
      {$$ = [$1, $3];} 
    | E ':' RuleEvents 
      {$$ = [$1, $3];} 
    | B ':' RuleBinds 
      {$$ = [$1, $3];} 
    ; 

我可以将它定义为零或某种情况吗?

回答

1

将元素添加到地图时检查重复项。例如:

| RuleMemberList ',' RuleMember 
    { $$ = $1; 
     if ($3[0] in $1) 
     error("duplicate key ", $3[0], " in map"); 
     else 
     $1[$3[0]] = $3[1];} 
; 
+0

它看起来很好,但没有称为“错误”的功能。你是否熟悉我可以用来返回错误的另一个函数? – sidanmor

+1

找到解决方案:扔“消息”工作正常。使用JISON(https://zaa.ch/jison/) – sidanmor