reading json object with jquery

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jon Paal [MSMD]

    reading json object with jquery

    using json like

    ( {"Records": [ {"firstname":"N ancy","lastname ":"Davolio" } ], "RecordCount":" 1" } )

    and jquery like:

    $.ajax({
    ....

    success: function(json, status) {
    if(json.Records ){alert("firstn ame= "+json.Records. firstname );}
    ....

    I can retrieve values for firstname if I use the reference spelled out

    is there a way to get it by numerical position, something like:

    if(json.Records ){alert("firstn ame= "+json.Records. 0 );}

    except it would work .. :)

    thanks in advance


  • Jorge

    #2
    Re: reading json object with jquery

    On May 4, 8:50 pm, "Jon Paal [MSMD]" <Jon nospam Paal @ everywhere dot
    comwrote:
    using json like
    >
    ( {"Records": [ {"firstname":"N ancy","lastname ":"Davolio" } ], "RecordCount":" 1" } )
    >
    and jquery like:
    >
     $.ajax({
    ...
    >
        success: function(json, status) {
         if(json.Records ){alert("firstn ame= "+json.Records. firstname );}
    ...
    >
    I can retrieve values for firstname if I use the reference spelled out
    >
    is there a way to get it by numerical position, something like:
    >
      if(json.Records ){alert("firstn ame= "+json.Records. 0 );}
    >
    except it would work .. :)
    >
    thanks in advance
    <html>
    <head></head>
    <body>
    <script>
    var jsonText, records, recordCount, i, a, b;

    /*
    If the data was serialized this way :
    */

    jsonText='[["Nancy","Davoli o"],["Jon","Paal "]]';

    records = eval(jsonText);

    /*
    Then you could do :
    */
    recordCount = records.length;
    for (i=0; i<recordCount; i++) {
    a = records[i][0];
    b = records[i][1]
    alert( b+", "+a);
    }

    /*
    HTH,
    --Jorge.
    */
    </script>
    </body>
    </html>

    Comment

    • Jon Paal [MSMD]

      #3
      Re: reading json object with jquery

      thanks,

      this will work, and if I still need formal json I'll go back to hard coding names....




      Comment

      • Lasse Reichstein Nielsen

        #4
        Re: reading json object with jquery

        "Jon Paal [MSMD]" <Jon nospam Paal @ everywhere dot comwrites:
        using json like
        >
        ( {"Records": [ {"firstname":"N ancy","lastname ":"Davolio" } ], "RecordCount":" 1" } )
        >
        and jquery like:
        >
        $.ajax({
        ...
        >
        success: function(json, status) {
        if(json.Records ){alert("firstn ame= "+json.Records. firstname );}
        ...
        I hope it's "json.Recor ds[0].firstname", since Records is an array.
        I can retrieve values for firstname if I use the reference spelled out
        >
        is there a way to get it by numerical position, something like:
        >
        if(json.Records ){alert("firstn ame= "+json.Records. 0 );}
        json.Records[0] gives the first record.
        To retrieve the "firstname" property, you need to use the "firstname"
        property name. There is no ordering of named properties, so they don't
        have a numerical index at all.

        /L
        --
        Lasse Reichstein Nielsen - lrn@hotpop.com
        DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleD OM.html>
        'Faith without judgement merely degrades the spirit divine.'

        Comment

        • Jorge

          #5
          Re: reading json object with jquery

          On May 5, 5:57 am, "Jon Paal [MSMD]" <Jon nospam Paal @ everywhere dot
          comwrote:
          thanks,
          >
          this will work, and if I still need formal json I'll go back to hard coding names....
          Cool.

          It's not stated clearly enough at json.org :
          http://tools.ietf.org/html/rfc4627 : line 75 :
          "A JSON text is a serialized object *** or array. ***"

          But what parses as valid json ?


          <html>
          <head>
          <style>
          bad {
          color: red;
          }
          blue {
          color: blue;
          }
          </style>
          <script src="http://www.JSON.org/json2.js">
          /*
          Please do NOT link to json.org,
          use your own copy instead.
          */
          </script>

          </head>
          <body>
          <!--567890123456789 012345678901234 567890123456789 012345678901234 567890
          -->
          <script>
          (function () {
          var testIt = function (p) {
          var i, name = prefix = msg = "";
          var datesAsObjects = function (key, value) {
          /*
          see the reviver function in the source code :
          json.org/json2.js line ~104..
          this is an example function that intercepts Date(mm/dd/yyyy)
          and turns it into a date object instead of a string.
          It's NOT part of the json standard, it's just a quick
          example of a reviver function. (and it has a bug).
          */
          var d;
          if (typeof value === 'string' &&
          value.slice(0, 5) === 'Date(' &&
          value.slice(-1) === ')') {
          d = new Date(value.slic e(5, -1));
          if (d) {
          return d;
          }
          }
          return value;
          }
          try {
          data = JSON.parse(p, datesAsObjects) ;
          /*
          See the source : json.org/json2.js
          */
          if (typeof data === 'object') {
          if (data.construct or === Array) {
          msg = "an object : Array : ";
          for (i=0;i<data.len gth;i++) {
          msg += prefix+"e["+i+"]: "+typeof data[i]+" = "+data[i];
          prefix = ", ";
          }
          } else if (data.construct or === Object) {
          msg = "an object : Object : ";
          for (name in data) {
          if (data.hasOwnPro perty(name)) {
          msg += prefix+name+": "+typeof data[name]+" = "+data[name];
          }
          }
          } else {
          msg="an object whose constructor is : "+data.construc tor;
          }
          } else {
          msg = "a " + typeof data + ": " + data;
          }
          document.write( "The string "+p+" was parsed as");
          document.write( " VALID json.\nIt produced " + msg + "<br>");
          } catch (e) {
          document.write( "<bad>The string "+p+" is NOT");
          document.write( " valid json.</bad><br>");
          }
          };

          /*
          In theory, just arrays and objects,
          in practice :
          let's see what's what (valid json?) :
          */

          testIt('01/15/2008'); testIt('[01/15/2008]');
          testIt('15/01/2008'); testIt('[15/01/2008]');
          testIt('"01/15/2008"'); testIt('["01/15/2008"]');
          testIt('"15/01/2008"'); testIt('["15/01/2008"]');
          testIt('Date(15/01/2008)'); testIt('[Date(15/01/2008)]');
          testIt('Date(01/15/2008)'); testIt('[Date(01/15/2008)]');
          /*
          the next one gives the date wrong.
          */
          document.write( "<blue>");
          testIt('"Date(1 5/01/2008)"'); testIt('["Date(15/01/2008)"]');
          document.write( "</blue>");
          testIt('"Date(0 1/15/2008)"'); testIt('["Date(01/15/2008)"]');
          testIt('true'); testIt('[true]');
          testIt('True'); testIt('[True]');
          testIt('false') ; testIt('[false]');
          testIt('False') ; testIt('[False]');
          testIt('null'); testIt('[null]');
          testIt('Null'); testIt('[Null]');
          testIt('"true"' ); testIt('["true"]');
          testIt('"True"' ); testIt('["True"]');
          testIt('"false" '); testIt('["false"]');
          testIt('"False" '); testIt('["False"]');
          testIt('"null"' ); testIt('["null"]');
          testIt('"Null"' ); testIt('["Null"]');
          testIt('Hi there !'); testIt('[Hi there !]');
          testIt('"Hi there !"'); testIt('["Hi there !"]');
          testIt('99'); testIt('[99]');
          testIt('99.98') ; testIt('[99.98]');
          testIt('9.98e-16'); testIt('[9.98e-16]');
          testIt('"99"'); testIt('["99"]');
          testIt('"99.98" '); testIt('["99.98"]');
          testIt('"9.98e-16"'); testIt('["9.98e-16"]');
          testIt('[["Nancy","Davoli o"],["Jon","Paal "]]');
          /*
          the next one gives an invalid date.
          */
          document.write( "<blue>");
          testIt('["Date(01/15/2008)","Date()" ,"Date","99" ,99]');
          document.write( "</blue>");
          testIt('{"aProp erty":99}');
          testIt('"functi on(){alert(wind ow.location.hre f)}"');
          testIt('functio n(){alert(windo w.location.href )}');
          testIt('"window .aGlobalVar=99" '); testIt('window. aGlobalVar=99') ;

          /*
          HTH
          --Jorge.
          */
          })();
          </script>
          </body>
          </html>

          Comment

          • jdalton

            #6
            Re: reading json object with jquery

            The jQuery support list is here:

            Comment

            • Jorge

              #7
              Re: reading json object with jquery

              On May 5, 3:07 pm, jdalton <John.David.Dal ...@gmail.comwr ote:
              The jQuery support list is here:http://groups.google.com/group/jquery-en
              The json support list is here:

              Comment

              • Jon Paal [MSMD]

                #8
                Re: reading json object with jquery

                A solution to the original json structure:

                success: function(json, status) {
                var records = json.Records;
                var str = "";
                if(records ){
                for(var i = 0; i < records.length; i++){
                for(var j in records[i]){
                str += j + " --" + records[i][j] + "\n";
                }
                }
                alert(str);
                }





                "Jon Paal [MSMD]" <Jon nospam Paal @ everywhere dot comwrote in message news:McCdnX-gdIMbmIPVnZ2dnU VZ_s-pnZ2d@palinacqu isition...
                using json like
                >
                ( {"Records": [ {"firstname":"N ancy","lastname ":"Davolio" } ], "RecordCount":" 1" } )
                >
                and jquery like:
                >
                $.ajax({
                ...
                >
                success: function(json, status) {
                if(json.Records ){alert("firstn ame= "+json.Records. firstname );}
                ...
                >
                I can retrieve values for firstname if I use the reference spelled out
                >
                is there a way to get it by numerical position, something like:
                >
                if(json.Records ){alert("firstn ame= "+json.Records. 0 );}
                >
                except it would work .. :)
                >
                thanks in advance
                >

                Comment

                • Jorge

                  #9
                  Re: reading json object with jquery

                  On May 6, 5:27 am, "Jon Paal [MSMD]" <Jon nospam Paal @ everywhere dot
                  comwrote:
                  A solution to the original json structure:
                  >
                  success: function(json, status) {
                    var records = json.Records;
                    var str = "";
                    if(records ){
                     for(var i = 0; i < records.length; i++){
                      for(var j in records[i]){
                       str += j + " --" + records[i][j] + "\n";
                      }
                     }
                    alert(str);
                    }
                  >
                  Yep !

                  Still, I'd consider that :

                  {"Records":
                  [{"firstname":"N ancy","lastname ":"Davolio" }],"RecordCount": "1"}

                  contains as much info as :

                  [["Nancy","Davoli o"]]

                  Bus is almost 3x longer.

                  If you want the headers, you can save them into Records[0] (and keep
                  sending them but only once) :

                  [["firstname","la stname"],["Nancy","Davoli o"]]

                  Which still is more compact than the original structure :

                  [["firstname","la stname"],["Nancy","Davoli o"]]
                  {"Records":
                  [{"firstname":"N ancy","lastname ":"Davolio" }],"RecordCount": "1"}

                  and tends to be still more compact as the # of records go up : 175 vs
                  340 chars. (~50%)

                  [
                  ["firstname","la stname"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"],
                  ["Nancy","Davoli o"]
                  ]

                  ==

                  {"Records":[
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" },
                  {"firstname":"N ancy","lastname ":"Davolio" }],
                  "RecordCount":" 3"}

                  And the code is almost the same :

                  success: function(json, status) {
                  var i, j, r = json, str = "";
                  if (r) {
                  for (i=1; i<r.length; i++) {
                  for (j=0; j<r[i].length; j++) {
                  str += r[0][j] + " --" + r[i][j] + "\n";
                  }
                  }
                  alert (str);
                  }

                  --Jorge.

                  Comment

                  • Thomas 'PointedEars' Lahn

                    #10
                    Re: reading json object with jquery

                    Jorge wrote:
                    On May 5, 3:07 pm, jdalton <John.David.Dal ...@gmail.comwr ote:
                    >The jQuery support list is here:http://groups.google.com/group/jquery-en
                    >
                    The json support list is here:
                    http://tech.groups.yahoo.com/group/json/
                    Peer reviews are included here:



                    PointedEars
                    --
                    Prototype.js was written by people who don't know javascript for people
                    who don't know javascript. People who don't know javascript are not
                    the best source of advice on designing systems that use javascript.
                    -- Richard Cornford, cljs, <f806at$ail$1$8 300dec7@news.de mon.co.uk>

                    Comment

                    Working...