One document matched: draft-ietf-appsawg-json-pointer-01.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml">
<!ENTITY RFC2616 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml">
<!ENTITY RFC4627 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4627.xml">
<!ENTITY RFC5234 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5234.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-ietf-appsawg-json-pointer-01" ipr="trust200902">
<front>
<title abbrev="JSON Pointer">JSON Pointer </title>
<author fullname="Paul C. Bryan" initials="P." surname="Bryan" role="editor">
<organization>ForgeRock</organization>
<address>
<phone>+1 604 783 1481</phone>
<email>pbryan@anode.ca</email>
</address>
</author>
<author fullname="Kris Zyp" initials="K." surname="Zyp">
<organization>SitePen (USA)</organization>
<address>
<phone>+1 650 968 8787</phone>
<email>kris@sitepen.com</email>
</address>
</author>
<date year="2012"/>
<area>General</area>
<workgroup>Applications Area Working Group</workgroup>
<keyword>json</keyword>
<abstract>
<t>JSON Pointer defines a string syntax for identifying a specific value within
a JSON document.</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>This specification defines JSON Pointer, a string syntax for identifying a
specific value within a
<xref target="RFC4627">JavaScript Object Notation (JSON)</xref> text document.
This syntax is intended to be easily expressed in JSON string values and
<xref target="RFC3986">Uniform Resource Identifier (URI)</xref> fragment
identifiers.</t>
</section>
<section title="Conventions">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in <xref target="RFC2119"/>.</t>
<t>This specification expresses normative syntax rules using
<xref target="RFC5234">Augmented Backus-Naur Form</xref> (ABNF) notation.</t>
</section>
<section title="Syntax">
<t>A JSON Pointer is a <xref target="Unicode"/> string containing a sequence
of zero or more reference tokens, each prefixed by a '/' (%x2F) character.</t>
<t>If a reference token contains '/' (%x2F) or '^' (%x5E) characters, such
characters MUST each be prefixed (escaped) with a '^' (%x5E) character.</t>
<t><figure><preamble>ABNF syntax:</preamble><artwork><![CDATA[
json-pointer = *( "/" reference-token )
reference-token = *( unescaped / escaped )
unescaped = %x00-2E / %x30-5B / %x5D-10FFFF
escaped = "^" ( "/" / "^" )
]]> </artwork></figure></t>
<t>It is an error condition if a JSON Pointer value does not conform to this
syntax.</t>
</section>
<section title="Evaluation">
<t>Evaluation of a JSON Pointer begins with a reference to the root value of a
JSON text document and completes with a reference to some value within the
document. Each reference token in the JSON Pointer is sequentially evaluated.</t>
<t>Evaluation of each reference token begins by unescaping any escaped character
sequence; this is performed by removing the '^' (escape) prefix. The reference
token then modifies which value is referenced according to the following
scheme:<list>
<t>If the currently referenced value is a JSON object, the new referenced
value is the object member with the name identified by the reference
token. The member name is equal to the token if it has the same number of
Unicode characters as token and their codepoints are positionwise equal.
If a referenced member name is not unique in an object, the member that is
referenced is undefined.</t>
<t>If the currently referenced value is a JSON array, the reference token MUST
contain characters that represent an unsigned base-10 integer value, and the
new referenced value is the array element with the zero-based index identified
by the token.</t>
</list></t>
<t>If a reference token is being evaluated against a JSON document, the
implementation MAY evaluate each token against a concrete value, and terminate
evaluation with an error condition if a evaluation fails to resolve a
concrete value.</t>
</section>
<section title="JSON String Representation">
<t>A JSON Pointer MAY be represented in a JSON string value. Per
<xref target="RFC4627"/>, section 2.5, all instances of quotation
mark '"' (%x22), reverse solidus '\' (%x5C) and control (%x00-1F) characters
MUST be escaped.</t>
</section>
<section title="URI Fragment Identifier Representation">
<t>A JSON Pointer MAY be represented in a URI fragment identifier. The JSON
pointer MUST be <xref target="RFC3629">UTF-8</xref> encoded as octets; octets
not in the URI "unreserved" set SHOULD be percent-encoded, per
<xref target="RFC3986"/>, section 2.5.</t>
</section>
<section anchor="Errors" title="Error Handling">
<t>In the event of an error condition, evaluation of the JSON Pointer fails to
complete.</t>
</section>
<section anchor="IANA" title="IANA Considerations">
<t>This document has no IANA actions.</t>
</section>
<section anchor="Security" title="Security Considerations">
<t>A given JSON Pointer is not guaranteed to reference an actual JSON value.
Implementations should be aware of this and take appropriate precautions.</t>
</section>
<section title="Acknowledgements">
<t>The following individuals contributed ideas, feedback and wording, which
contributed to the content of this specification:<list>
<t>Mike Acar, Carsten Bormann, Tim Bray, Jacob Davies, Martin J. Dürst,
Björn Höhrmann, James H. Manger, Mark Nottingham, Drew Perttula,
Julian Reschke.</t>
</list></t>
</section>
</middle>
<back>
<references title="Normative References">
&RFC2119;
&RFC3629;
&RFC3986;
&RFC4627;
&RFC5234;
<reference anchor="Unicode" target="http://www.unicode.org/versions/Unicode6.0.0/">
<front>
<title>The Unicode Standard, Version 6.0</title>
<author>
<organization>The Unicode Consortium</organization>
</author>
<date year="2011" month="October"/>
</front>
</reference>
</references>
<section title="Examples">
<t>
<figure>
<preamble>The following examples illustrate the use of JSON Pointers in
URI fragments for a JSON text document located at
http://example.com/example.json, with the following value:</preamble>
<artwork><![CDATA[
{
"foo": {
"bar": [ "element0", "element1" ],
"inner object": {
"baz": "qux"
}
}
]]> </artwork>
</figure>
</t>
<t><list style="hanging">
<t hangText="http://example.com/example.json#"><vspace/>Resolves to the object
value at the root of the JSON text document.</t>
<t hangText="http://example.com/example.json#/foo"><vspace/>Resolves to the
object value of the "foo" member in the root object.</t>
<t hangText="http://example.com/example.json#/foo/inner%20object"><vspace/>Resolves
to the object value of the "inner object" member in the "foo" object value in
the root object.</t>
<t hangText="http://example.com/example.json#/foo/inner%20object/baz"><vspace/>Resolves
to the string value "qux", which is the value of the "baz" member in the
"inner object" member in the "foo" member in the root
object.</t>
<t hangText="http://example.com/example.json#/foo/bar/0"><vspace/>Resolves to
the string value "element0", which is the first value in the "bar" array in
the "foo" member in the root object.</t>
</list></t>
</section>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 02:37:24 |