Advertisement
Guest User

Untitled

a guest
May 19th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. #!/usr/bin/env php
  2. <?php
  3.  
  4. if ($argc == 1) {
  5. $data = fgets(STDIN);
  6. } else {
  7. $file = fopen($argv[1], 'r') or die('read file ' . $argv[1] . ' fail');
  8. $data = fread($file, filesize($argv[1]));
  9. }
  10.  
  11. $json = json_decode($data) or die('parse input data fail');
  12.  
  13. echo "message Foobar {\n";
  14. parseJson($json, ' ');
  15. echo "}\n";
  16.  
  17. function parseJson($obj, $prefix)
  18. {
  19. $count = 0;
  20. foreach ($obj as $key => $val) {
  21. $count++;
  22. switch (gettype($val)) {
  23. case 'boolean':
  24. echo $prefix . 'bool ' . $key . ' = ' . $count . ";\n";
  25. break;
  26.  
  27. case 'integer':
  28. echo $prefix . 'int64 ' . $key . ' = ' . $count . ";\n";
  29. break;
  30.  
  31. case 'double':
  32. echo $prefix . 'double ' . $key . ' = ' . $count . ";\n";
  33. break;
  34.  
  35. case 'string':
  36. echo $prefix . 'string ' . $key . ' = ' . $count . ";\n";
  37. break;
  38.  
  39. case 'NULL':
  40. echo $prefix . 'google.protobuf.Any ' . $key . ' = ' . $count . ";\n";
  41. break;
  42.  
  43. case 'array':
  44. switch (gettype($val[0])) {
  45. case 'boolean':
  46. echo $prefix . 'repeated bool ' . $key . ' = ' . $count . ";\n";
  47. break;
  48.  
  49. case 'integer':
  50. echo $prefix . 'repeated int64 ' . $key . ' = ' . $count . ";\n";
  51. break;
  52.  
  53. case 'double':
  54. echo $prefix . 'repeated double ' . $key . ' = ' . $count . ";\n";
  55. break;
  56.  
  57. case 'string':
  58. echo $prefix . 'repeated string ' . $key . ' = ' . $count . ";\n";
  59. break;
  60.  
  61. case 'NULL':
  62. echo $prefix . 'repeated google.protobuf.Any ' . $key . ' = ' . $count . ";\n";
  63. break;
  64.  
  65. default:
  66. echo "\n";
  67. echo $prefix . 'message ' . $key . " {\n";
  68. parseJson($val[0], ' ' . $prefix);
  69. echo $prefix . "}\n";
  70. echo $prefix . 'repeated ' . $key . ' ' . $key . ' = ' . $count . ";\n";
  71. echo "\n";
  72. break;
  73. }
  74. break;
  75.  
  76. case 'object':
  77. echo "\n";
  78. echo $prefix . 'message ' . $key . " {\n";
  79. parseJson($val, ' ' . $prefix);
  80. echo $prefix . "}\n";
  81. echo $prefix . $key . ' ' . $key . ' = ' . $count . ";\n";
  82. echo "\n";
  83. break;
  84.  
  85. default:
  86. break;
  87. }
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement