2017-07-09 9 views
1

私はGitLabのFile Repository APIを使ってファイルの内容にアクセスしています。これはどのような種類のJSONオブジェクトですか? (Gitlab API)、(Python)

{:file_name=>"requirements.txt", :file_path=>"requirements.txt", :size=>30, :encoding=>"base64", :content=>"ImZsYXNrIgoidXdzZ2kiCiJnb2dvc2VjcmV0cyIK", :ref=>"master", :blob_id=>"7f551dddd4fd8931419450fb357bad83d2efbe6a", :commit_id=>"40e161fcb323be28259712a6cf5da8fddfda80e1", :last_commit_id=>"40e161fcb323be28259712a6cf5da8fddfda80e1"} 

私は決してキーの前にコロンを見たことがなく、JSONオブジェクトで '=>'を見たことはありません。返された他のすべてのJSONオブジェクトはうまくいきました。 200応答が返されているため、APIに対する要求は間違っていません。

これは何ですか?

+1

JSONはそうではありません。 –

+1

https://gitlab.com/gitlab-org/gitlab-ee/issues/2298が適切と思われます。 –

+1

ルビーハッシュ(辞書)のように見えます。 –

答えて

4

これはGitlabのオープンバグです。 https://gitlab.com/gitlab-org/gitlab-ee/issues/2298を参照してください。

現在のバグの動作は何ですか?

応答:

{:file_path=>"Readme.txt", :branch=>"master"} 

期待正しい行動とは何ですか?

応答:

{"file_name": "Readme.txt", "branch": "master"} 
+0

GitLabがRubyをバックエンドの仕事? Rubyのハッシュとまったく同じように見え、JSONに変換するのを忘れるかもしれません。 –

+0

@ChristianDean - それはそうです:https://docs.gitlab.com/ce/development/architecture.html#system-layout –

+0

テキストファイルからコンテンツを取得する方法を今ではよく分かりません。このファイルはテキストファイルである必要があります – user7343117

0

Pythonの辞書やJSONコンバータにRubyのハッシュを作成します。注:以下の解決策は、2分で作成したクイックアンドダーティです。正規表現を使用すると、もっとうまくやることができます。

s = '{:file_path=>"Readme.txt", :branch=>"master"}' 
s = s[1:-1] 
s = s.split(',') 
s = [elem.strip() for elem in s] 
s = [subs[1:] for subs in s] 
s = [subs.replace('"', '') for subs in s] 
my_dict = {elem.split('=>')[0]: elem.split('=>')[1] for elem in s} 

my_dict次のようになります。{'file_path': 'Readme.txt', 'branch': 'master'}

1

問題は、まだ私は同じ問題に遭遇したgitlab(issue 2298

で開かれます。 .txtファイルのみが影響を受けることを確認しました。 Gitのための未知の拡張子を持つファイルは影響されない(例えば:.myFile.unknowExtension ...)

これは、Content-Typeヘッダで検出Gitlabはルビーハッシュに応答を送信したときにtext/plainのように設定することができます。

ここでは、PHPでルビーハッシュを解析する簡単な関数を示します。

function ruby_hash_decode($ruby) 
    { 
     if (substr($ruby, 0, 2) === "{:") { 

      $ruby = str_replace('{:', '{"', $ruby); 

      $ruby = str_replace('", :', '", "', $ruby); 

      $ruby = str_replace(', :', ', "', $ruby); 

      $ruby = str_replace('=>"', '":"', $ruby); 

      $ruby = str_replace('=>', '":', $ruby); 

      $ruby = \json_decode($ruby); 
     } 

     return $ruby; 
    } 
関連する問題