Javascript 多数据的JSON解析

Javascript 多数据的JSON解析,javascript,json,parsing,jsonobject,Javascript,Json,Parsing,Jsonobject,Jsonlint显示此JSON对象有效: [{"obj":{"markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]","path":"[[47.040182144806664,

Jsonlint显示此JSON对象有效:

 [{"obj":{"markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]","path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]"}}] 
我试图访问带有k、B和path元素的标记,但它总是设置为未定义。这是我的密码:

 try {

       var jsonData = JSON.parse(myJson);
       console.log(jsonData.obj[0].markers[0].k);
     }
 catch (e) {
             console.error("Parsing error:", e);
           }

有人能告诉我如何正确访问JSON对象的元素吗?谢谢你的帮助。

我可以告诉你两个问题:

第一,是的,它是有效的Json,但标记和路径对象值用字符串引号括起来:

"markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]",
"path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]"
你想要的是:

"markers":[{"k":47.040182144806664,"B":0.52734375},{"k":50.90303283111257,"B":10.37109375},{"k":52.53627304145945,"B":-1.7578125},{"k":41.77131167976406,"B":-6.591796875}],

"path":[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]
但鉴于上述情况,也不能转义标记“k”的k和b对象名称应为“k”:

因此,完成编辑的JSON如下所示:

[{"obj":{"markers":[{"k":47.040182144806664,"B":0.52734375},{"k":50.90303283111257,"B":10.37109375},{"k":52.53627304145945,"B":-1.7578125},{"k":41.77131167976406,"B":-6.591796875}],"path":[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]}}]

创建此字符串时一定出了问题。是的,它是有效的JSON,但它的格式与您想象的不同,因为您可以转义控制字符,如
[
]

请尝试以下字符串:

[
   {
      "obj":{
         "markers":[
            {
               "k":47.040182144806664,
               "B":0.52734375
            },
            {
               "k":50.90303283111257,
               "B":10.37109375
            },
            {
               "k":52.53627304145945,
               "B":-1.7578125
            },
            {
               "k":41.77131167976406,
               "B":-6.591796875
            }
         ],
         "path":[
            [
               47.040182144806664,
               0.52734375
            ],
            [
               50.90303283111257,
               10.37109375
            ],
            [
               52.53627304145945,
               -1.7578125
            ],
            [
               41.77131167976406,
               -6.591796875
            ]
         ]
      }
   }
]
与字符串相反:

[
   {
      "obj":{
         "markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]",
         "path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]"
      }
   }
]

obj
是一个对象,而不是一个array@chazsolo不,obj只是我在MySQL查询中使用的数组的索引:$rows[]=array('obj'=>$r);echo json_encode($rows);它可以是'Bob'…因为markers对象是字符串而不是数组,所以“markers”的值是字符串中的值“@loanburger你是什么意思,数组用JSON_encode编码成JSON对象。当我返回JSON对象时,JSON.parse()JavaScript函数运行良好。此JSON描述的os类型是JSON.parse()后面的[object]。你能用一个例子解释一下吗?你转义了
k
“k\”
不是索引-它是
标记的值
索引。你的答案中仍然是标记和路径的双引号?是的,这只是对象名,但值不在引号中。也许你的JSON描述格式更为完善,我刚刚测试了它,但在尝试访问JSON.parse()之后的元素时仍然没有定义。您是如何访问该值的?要获得第一个
47.040182144806664
,我需要
jsonData[0].obj.markers[0].k
。你也这么做了吗?这对我来说很好…很抱歉你的版本是正确的,现在更好了,谢谢!