  JSON (JavaScript Object Notation) is a data encoding that allows structured
data to be used in a standardized and straightforward manner across systems.
Schemas for JSON-formatted data can be constructed using the JSON Schema
standard, which describes the data types, structure, and meaning of
JSON-formatted data. JSON is commonly used for storing and transmitting
information such as program configurations, web API requests and responses, or
remote procedure calls; or data records, such as healthcare information or
other structured documents. Since JSON is a plaintext format with potentially
highly complex definitions, it can be an arduous process to change code which
handles structured JSON data when its storage or transmission schemas are
modified. Our work describes a program synthesis method to generate a program
that accepts data conforming to a given input JSON Schema and automatically
converts it to conform to a resulting, target JSON Schema. We use a top-down,
type-directed approach to search for programs using a set of rewrite rules
which constrain the ways in which a schema can be modified without unintended
data loss or corruption. Once a satisfying sequence of rewrites has been found,
we pass an intermediate representation of the rewrite sequence to a code
generation backend, which synthesizes a program which executes the data
transformation. This system allows users to quickly and efficiently modify or
augment their existing systems in safe ways at their interfaces.
