Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env php
- <?php
- if ($argc == 1) {
- $data = fgets(STDIN);
- } else {
- $file = fopen($argv[1], 'r') or die('read file ' . $argv[1] . ' fail');
- $data = fread($file, filesize($argv[1]));
- }
- $json = json_decode($data) or die('parse input data fail');
- echo "message Foobar {\n";
- parseJson($json, ' ');
- echo "}\n";
- function parseJson($obj, $prefix)
- {
- $count = 0;
- foreach ($obj as $key => $val) {
- $count++;
- switch (gettype($val)) {
- case 'boolean':
- echo $prefix . 'bool ' . $key . ' = ' . $count . ";\n";
- break;
- case 'integer':
- echo $prefix . 'int64 ' . $key . ' = ' . $count . ";\n";
- break;
- case 'double':
- echo $prefix . 'double ' . $key . ' = ' . $count . ";\n";
- break;
- case 'string':
- echo $prefix . 'string ' . $key . ' = ' . $count . ";\n";
- break;
- case 'NULL':
- echo $prefix . 'google.protobuf.Any ' . $key . ' = ' . $count . ";\n";
- break;
- case 'array':
- switch (gettype($val[0])) {
- case 'boolean':
- echo $prefix . 'repeated bool ' . $key . ' = ' . $count . ";\n";
- break;
- case 'integer':
- echo $prefix . 'repeated int64 ' . $key . ' = ' . $count . ";\n";
- break;
- case 'double':
- echo $prefix . 'repeated double ' . $key . ' = ' . $count . ";\n";
- break;
- case 'string':
- echo $prefix . 'repeated string ' . $key . ' = ' . $count . ";\n";
- break;
- case 'NULL':
- echo $prefix . 'repeated google.protobuf.Any ' . $key . ' = ' . $count . ";\n";
- break;
- default:
- echo "\n";
- echo $prefix . 'message ' . $key . " {\n";
- parseJson($val[0], ' ' . $prefix);
- echo $prefix . "}\n";
- echo $prefix . 'repeated ' . $key . ' ' . $key . ' = ' . $count . ";\n";
- echo "\n";
- break;
- }
- break;
- case 'object':
- echo "\n";
- echo $prefix . 'message ' . $key . " {\n";
- parseJson($val, ' ' . $prefix);
- echo $prefix . "}\n";
- echo $prefix . $key . ' ' . $key . ' = ' . $count . ";\n";
- echo "\n";
- break;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement