// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // The proto definition for JSON format has been written based on // http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf syntax = "proto2"; package json_proto; message JsonObjectField { required string name = 1; required JsonValue value = 2; } message JsonObject { repeated JsonObjectField field = 3; } message JsonValue { oneof value { // Json value types: // null: null, will be used when 'oneof' contains nothing // object: another json object of any type JsonObject object_value = 1; // array: an array of values ArrayValue array_value = 2; // number: can be an integer, a float, an exponent NumberValue number_value = 3; // string: unicode string StringValue string_value = 4; // boolean: true or talse BooleanValue boolean_value = 5; } } message ArrayValue { repeated JsonValue value = 1; } message NumberInteger { required int64 value = 1; } message NumberFloat { required double value = 1; } message NumberExponent { required int32 base = 1; required int32 exponent = 2; required bool use_uppercase = 3; } message NumberExponentFrac { required float base = 1; required int32 exponent = 2; required bool use_uppercase = 3; } message NumberValue { required NumberInteger integer_value = 1; // integer_value is used when oneof field below has nothing. oneof value { NumberFloat float_value = 2; NumberExponent exponent_value = 3; NumberExponentFrac exponent_frac_value = 4; } } message StringValue { required string value = 1; } message BooleanValue { required bool value = 1; }