Loading ...
Sorry, an error occurred while loading the content.

json.js

Expand Messages
  • Douglas Crockford
    I made a small modification to parseJSON as suggested by Tarcisio Fedrizzi. It improves IE s performance on large texts.
    Message 1 of 13 , Sep 27, 2006
    • 0 Attachment
      I made a small modification to parseJSON as suggested by Tarcisio
      Fedrizzi. It improves IE's performance on large texts.
    • Douglas Crockford
      I updated the parseJSON method. I removed the string deletion phase which was a added as a workarond for IE s exponential regexp performance. We found that IE
      Message 2 of 13 , Oct 5, 2006
      • 0 Attachment
        I updated the parseJSON method. I removed the string deletion phase
        which was a added as a workarond for IE's exponential regexp
        performance. We found that IE is happier doing lazy matching. The new
        version is simpler and faster.
      • Douglas Crockford
        I revised json.js to clarify specification issues in the proposed ECMAScript 4th Edition standard. It now encodes dates as formal ISO strings. By adding a
        Message 3 of 13 , Oct 29, 2006
        • 0 Attachment
          I revised json.js to clarify specification issues in the proposed
          ECMAScript 4th Edition standard.

          It now encodes dates as formal ISO strings. By adding a custom
          toJSONString method to a date object, other representations can be
          obtained.

          Custom toJSONString methods can also be added to any object or array.

          http://www.json.org/json.js
        • Peter Michaux
          Hi Douglas, At first glance it looks like it was much easier to modify the old file so that it didn t affect any built in prototypes and brake for-in loops. Do
          Message 4 of 13 , Oct 29, 2006
          • 0 Attachment
            Hi Douglas,

            At first glance it looks like it was much easier to modify the old
            file so that it didn't affect any built in prototypes and brake for-in
            loops. Do you think that you would be able to make the old file still
            available also but with a comment about dates and modified so it
            doesn't change any prototypes? This way people like me can start using
            JSON in existing apps without braking their code. I am lucky I
            downloaded the old file before it disappeared!

            Peter



            On 10/29/06, Douglas Crockford <douglas@...> wrote:
            >
            > I revised json.js to clarify specification issues in the proposed
            > ECMAScript 4th Edition standard.
            >
            > It now encodes dates as formal ISO strings. By adding a custom
            > toJSONString method to a date object, other representations can be
            > obtained.
            >
            > Custom toJSONString methods can also be added to any object or array.
            >
            > http://www.json.org/json.js
          • Joshua Raphael Fuentes
            ... From: Douglas Crockford To: json@yahoogroups.com Sent: Monday, October 30, 2006 7:08:33 AM Subject: [json] json.js I revised
            Message 5 of 13 , Oct 29, 2006
            • 0 Attachment
              ----- Original Message ----
              From: Douglas Crockford <douglas@...>
              To: json@yahoogroups.com
              Sent: Monday, October 30, 2006 7:08:33 AM
              Subject: [json] json.js













              I revised json.js to clarify specification issues in the proposed

              ECMAScript 4th Edition standard.



              It now encodes dates as formal ISO strings. By adding a custom

              toJSONString method to a date object, other representations can be

              obtained.



              Custom toJSONString methods can also be added to any object or array.



              http://www.json org/json. js














              <!--

              #ygrp-mlmsg {font-size:13px;font-family:arial,helvetica,clean,sans-serif;}
              #ygrp-mlmsg table {font-size:inherit;font:100%;}
              #ygrp-mlmsg select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}
              #ygrp-mlmsg pre, code {font:115% monospace;}
              #ygrp-mlmsg * {line-height:1.22em;}
              #ygrp-text{
              font-family:Georgia;
              }
              #ygrp-text p{
              margin:0 0 1em 0;
              }
              #ygrp-tpmsgs{
              font-family:Arial;
              clear:both;
              }
              #ygrp-vitnav{
              padding-top:10px;
              font-family:Verdana;
              font-size:77%;
              margin:0;
              }
              #ygrp-vitnav a{
              padding:0 1px;
              }
              #ygrp-actbar{
              clear:both;
              margin:25px 0;
              white-space:nowrap;
              color:#666;
              text-align:right;
              }
              #ygrp-actbar .left{
              float:left;
              white-space:nowrap;
              }
              .bld{font-weight:bold;}
              #ygrp-grft{
              font-family:Verdana;
              font-size:77%;
              padding:15px 0;
              }
              #ygrp-ft{
              font-family:verdana;
              font-size:77%;
              border-top:1px solid #666;
              padding:5px 0;
              }
              #ygrp-mlmsg #logo{
              padding-bottom:10px;
              }

              #ygrp-vital{
              background-color:#e0ecee;
              margin-bottom:20px;
              padding:2px 0 8px 8px;
              }
              #ygrp-vital #vithd{
              font-size:77%;
              font-family:Verdana;
              font-weight:bold;
              color:#333;
              text-transform:uppercase;
              }
              #ygrp-vital ul{
              padding:0;
              margin:2px 0;
              }
              #ygrp-vital ul li{
              list-style-type:none;
              clear:both;
              border:1px solid #e0ecee;
              }
              #ygrp-vital ul li .ct{
              font-weight:bold;
              color:#ff7900;
              float:right;
              width:2em;
              text-align:right;
              padding-right:.5em;
              }
              #ygrp-vital ul li .cat{
              font-weight:bold;
              }
              #ygrp-vital a {
              text-decoration:none;
              }

              #ygrp-vital a:hover{
              text-decoration:underline;
              }

              #ygrp-sponsor #hd{
              color:#999;
              font-size:77%;
              }
              #ygrp-sponsor #ov{
              padding:6px 13px;
              background-color:#e0ecee;
              margin-bottom:20px;
              }
              #ygrp-sponsor #ov ul{
              padding:0 0 0 8px;
              margin:0;
              }
              #ygrp-sponsor #ov li{
              list-style-type:square;
              padding:6px 0;
              font-size:77%;
              }
              #ygrp-sponsor #ov li a{
              text-decoration:none;
              font-size:130%;
              }
              #ygrp-sponsor #nc {
              background-color:#eee;
              margin-bottom:20px;
              padding:0 8px;
              }
              #ygrp-sponsor .ad{
              padding:8px 0;
              }
              #ygrp-sponsor .ad #hd1{
              font-family:Arial;
              font-weight:bold;
              color:#628c2a;
              font-size:100%;
              line-height:122%;
              }
              #ygrp-sponsor .ad a{
              text-decoration:none;
              }
              #ygrp-sponsor .ad a:hover{
              text-decoration:underline;
              }
              #ygrp-sponsor .ad p{
              margin:0;
              }
              o {font-size:0;}
              .MsoNormal {
              margin:0 0 0 0;
              }
              #ygrp-text tt{
              font-size:120%;
              }
              blockquote{margin:0 0 0 4px;}
              .replbq {margin:4;}
              -->






              cool...now JSON is getting bigger and better. I use json, and have great faith in it.. it's nice that can now consider date data types





              [Non-text portions of this message have been removed]
            • Martin Cooper
              ... I agree with Peter. Sure, these methods might become part of the language next year, but there should be a way for people to use the code today without
              Message 6 of 13 , Oct 30, 2006
              • 0 Attachment
                On 10/29/06, Peter Michaux <petermichaux@...> wrote:
                >
                > Hi Douglas,
                >
                > At first glance it looks like it was much easier to modify the old
                > file so that it didn't affect any built in prototypes and brake for-in
                > loops. Do you think that you would be able to make the old file still
                > available also but with a comment about dates and modified so it
                > doesn't change any prototypes? This way people like me can start using
                > JSON in existing apps without braking their code. I am lucky I
                > downloaded the old file before it disappeared!


                I agree with Peter. Sure, these methods might become part of the language
                next year, but there should be a way for people to use the code today
                without breaking other existing code.

                It would be very straightforward to define the functions in a namespace of
                their own (e.g. json), and then have a conditional block that also makes
                them available according to the standard, for people who want that.

                For example, something like:

                var json = {};
                json.arrayToJSONString = function() { ... }
                json.booleanToJSONString = function() { ... }
                ...
                if (typeof jsonExcludeStandard != "undefined") {
                Array.prototype.toJSONString = json.arrayToJSONString;
                Boolean.prototype.toJSONString = json.booleanToJSONString;
                ...
                }

                This will preserve the existing functionality by default. However, if I want
                to exclude the functions that modify standard prototypes, all I need to do
                is define jsonExcludeStandard before pulling in json.js.

                How about it?

                --
                Martin Cooper



                Peter
                >
                >
                >
                > On 10/29/06, Douglas Crockford <douglas@...> wrote:
                > >
                > > I revised json.js to clarify specification issues in the proposed
                > > ECMAScript 4th Edition standard.
                > >
                > > It now encodes dates as formal ISO strings. By adding a custom
                > > toJSONString method to a date object, other representations can be
                > > obtained.
                > >
                > > Custom toJSONString methods can also be added to any object or array.
                > >
                > > http://www.json.org/json.js
                >
                >
                >
                > Yahoo! Groups Links
                >
                >
                >
                >
                >


                [Non-text portions of this message have been removed]
              • Douglas Crockford
                Alistair Braidwood suggested a way to make toJSONString 25% faster by improving the way it handles commas. http://www.JSON.org/json.js
                Message 7 of 13 , Jun 11, 2007
                • 0 Attachment
                  Alistair Braidwood suggested a way to make toJSONString 25% faster by
                  improving the way it handles commas.

                  http://www.JSON.org/json.js
                • Douglas Crockford
                  The json.js reference implementation now produces date strings in the ISO Z format, in anticipation of the addition of Date.prototype.toISOString to
                  Message 8 of 13 , Jul 20, 2007
                  • 0 Attachment
                    The json.js reference implementation now produces date strings in the
                    ISO Z format, in anticipation of the addition of
                    Date.prototype.toISOString to ECMAScript.

                    http://www.JSON.org/json.js
                  • Douglas Crockford
                    I changed the way that json.js calls the hasOwnProperty method. A design flaw in JavaScript causes hasOwnProperty to fail when an object contains a property
                    Message 9 of 13 , Aug 5, 2007
                    • 0 Attachment
                      I changed the way that json.js calls the hasOwnProperty method. A
                      design flaw in JavaScript causes hasOwnProperty to fail when an object
                      contains a property called "hasOwnProperty".

                      http://json.org/json.js
                    • Douglas Crockford
                      The toJSONString methods can now take an optional whitelist parameter, an array of strings. It is used to select the properties that will be included in the
                      Message 10 of 13 , Aug 19, 2007
                      • 0 Attachment
                        The toJSONString methods can now take an optional whitelist parameter,
                        an array of strings. It is used to select the properties that will be
                        included in the JSON text.

                        http://www.json.org/json.js
                      • Julian Tonti-Filippini
                        I wanted to modify json.js to add RegExp support so I added the following: RegExp.prototype.toJSONString = function () { return this.toString().toJSONString();
                        Message 11 of 13 , Oct 3, 2007
                        • 0 Attachment
                          I wanted to modify json.js to add RegExp support so I added the following:

                          RegExp.prototype.toJSONString = function () {
                          return this.toString().toJSONString();
                          };

                          ...and found that it didn't work under Firefox because the typeof
                          RegExp is 'function' rather than 'object'. This required modification
                          of the switch in Object.prototype.toJSONString to add a fall-through
                          case for 'function'.

                          My gut tells me that there's something criminally wrong about does
                          this. Can someone tell me why?

                          - Julian
                        • Douglas Crockford
                          A new version of json.js is available. It corrects a problem in parseJSON where it was possible to have the contents of one of the caller s variables included
                          Message 12 of 13 , Oct 5, 2007
                          • 0 Attachment
                            A new version of json.js is available. It corrects a problem in
                            parseJSON where it was possible to have the contents of one of the
                            caller's variables included in the decoded value.

                            http://www.JSON.org/json.js
                          • Douglas Crockford
                            A design error in Firefox could allow parseJSON to include an eval function object in the resulting JSON object. This situation will now raise an exception.
                            Message 13 of 13 , Oct 10, 2007
                            • 0 Attachment
                              A design error in Firefox could allow parseJSON to include an eval
                              function object in the resulting JSON object. This situation will now
                              raise an exception.

                              http://www.JSON.org/json.js
                            Your message has been successfully submitted and would be delivered to recipients shortly.