Re: is JSON really "a type" (Re: data to json enhancements)
От | Darren Duncan |
---|---|
Тема | Re: is JSON really "a type" (Re: data to json enhancements) |
Дата | |
Msg-id | 5067E321.3000103@darrenduncan.net обсуждение исходный текст |
Ответ на | is JSON really "a type" (Re: data to json enhancements) (Hannu Krosing <hannu@krosing.net>) |
Список | pgsql-hackers |
Hannu Krosing wrote: > Reflecting over the dual possible interpretation of what it does mean to > convert between "text" and "json" data types it has dawned to me that > the confusion may come mainly from wanting json to be two things at once: > > 1. - a serialisation of of a subset of javascript objects to a string. > > 2. - a dynamic type represented by the above serialisation. > > case 1 > ------ > > If we stick with interpretation 1. then json datatype is really no more > than a domain based on "text" type and having a CHECK is_valid_json() > constraint. <snip> > case 2 > ------ > > My suggestions on using typecasts for convert-to-json were result of > this interpretation of json-as-dynamic-type. > > Having thought more of this I now think that we probably should leave > JSON alone and develop an separate dynamic type here. <snip> I think it would be best to have 2 main JSON-concerning data types: 1. A proper subset of "text" consisting of every value meeting some is_valid_json() constraint, as a DOMAIN; every value of this type is a "text". 2. A type that is disjoint from "text", that is, no value of this type would compare as equal to any "text" value. It would be considered a collection type, similarly to how an array or tuple or relation is, but having arbitrary depth and that is heterogeneous in the general case. You could say that #1 is to textual source code what #2 is to a parsed syntax tree of that code. Or that #1 is to textual XML what #2 is to an XML DOM. It would be type #2 above that is the primary JSON type, which has all the special operators for working with JSON, while type #1 would be opaque, just a character string, and must be cast as type #2 in order to use any special operators on it. Similarly, all the converting operators between other types and JSON would be with #2 only, and producing #1 must go through #2. So call #1 say JSON_source and #2 say JSON_model, or JSON_text and JSON respectively. That's how I think it should work. -- Darren Duncan
В списке pgsql-hackers по дате отправления: