2015-10-20 102 views
-1

我有一个包含了我认为是正确的JSON字符串JSON文件:JSON字符串解析每个字符作为一个对象

{"title": "exampleTitle", "tipTitle": "exampleTipTitle", "tip": "exampleTip"} 

我试图解析所述文件,并采取了3个值那么将它们存储在变量中,但是目前它将每个单独的字符解析为单独的对象,因此:

JSONobj[1] = " 

等等。假设currentLocation = json文件的目录位置。

代码

var jsonLocation = currentLocation + "json.txt"; 
var request = new XMLHttpRequest(); 
request.open("GET", jsonLocation, false); 
request.send(null); 
var returnValue = request.responseText; 
var JSONobj = JSON.parse(JSON.stringify(returnValue)); 
var headerTitle = JSONobj[0]; 

一些澄清,该字符串化是因为它抛出一个意外的标记错误。我已经尝试将文件磁贴改为.json,但这也没有区别。 “它也会在主线程上发出一个XMLHttpRequest”,但我不太确定如何解决这个问题。任何帮助,将不胜感激。

+0

附注:避免将'false'作为第三个参数传递给'open'。相反,拥抱网络编程的异步性。 –

回答

2
var returnValue = request.responseText; 

这里returnValue是JSON字符串。

"{\"title\": \"exampleTitle\", \"tipTitle\": \"exampleTipTitle\", \"tip\": \"exampleTip\"} 
var JSONobj = JSON.parse(JSON.stringify(returnValue)); 

这里你转换JSON到JSON字符串。所以你有一个JSON字符串表示一个字符串,而这个字符串是JSON数据结构的表示。

"\"{\\"title\\": \\"exampleTitle\\", \\"tipTitle\\": \\"exampleTipTitle\\", \\"tip\\": \\"exampleTip\\"}" 

然后解析它并将其转换回JSON的原始字符串。

"{\"title\": \"exampleTitle\", \"tipTitle\": \"exampleTipTitle\", \"tip\": \"exampleTip\"} 

所以你最终回到你开始的地方。

只要不使用JSON.stringify在这里,你将你的JSON转换为JavaScript对象:

var javascript_object = JSON.parse(returnValue); 

然后你有一个对象,但它不具有0属性,因此用javascript_object[0]访问它是没有意义的。这些属性有名称,例如javascript_object.title

+0

我看到,这个返回的对象对象,但我可以看到,我的问题更多的是我试图索引一些实际上不是数组的东西。我很感激帮助。 – CSafari

1

您的JSON并未描述数组,因此使用像0这样的索引编入索引是没有意义的。您的JSON描述了一个对象,它将具有名称为title,tipTitletip的属性。

此外,你矫枉过正您解析:你只是想解析,不字符串化(这是解析的对面):

var JSONobj = JSON.parse(returnValue); 

所以:

var JSONobj = JSON.parse(returnValue); 
var headerTitle = JSONobj.title; 
console.log(headerTitle); // "exampleTitle" 

注意:当你将它分配给你调用的变量JSONobj时,它不再是JSON,它只是一个普通的JavaScript对象,所以th在名称上有点误导。如果你正在编写源代码,并且你没有处理字符串,那么你就不再处理JSON了。 :-)

+0

与昆汀一起解决了这个问题,谢谢。 – CSafari