2017-07-31 3 views
0

私はオブジェクト{"f": 1, "i": 2, "g": 5, ...}のようなJSONを解析する必要がなく、定期的なJSONオブジェクトとは異なり、入力がオブジェクト内のゼロまたは1つのオカレンスを持つことができます...バイソン、ゼロまたは1つの出現

ので、これは間違ったオブジェクトであります{"f": 1, "f": 1, "i": 2, ...} "f twice"キーがあるためです。

そして、このオブジェクトはキー「i」を持ち、複数回出現しないため細かい{"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つのオカレンスに定義できますか?

答えて

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

関連する問題