2017-07-31 46 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