如何在“ course_details”中访问“ courseDesc”。我正在使用laravel作为后端制作一个React Native应用程序。我已经做了大量研究,几乎可以正常工作,但是在我的本机代码中收到JSON Parse错误Unrecognize令牌'<'。
[
{
id: 61987,
active_lesson: "1",
start_date: "2018-05-09",
due_date: "2018-05-23",
grade: "Fail",
created_at: "2018-05-09 12:59:47",
updated_at: "2018-09-19 07:12:40",
course_details: {
id: 573,
company_id: null,
courseDesc: null,
questionDisplay: "single",
}
},
{
id: 61988,
active_lesson: "1",
start_date: "2018-05-09",
due_date: "2018-05-23",
grade: "Not Yet Taken",
created_at: "2018-05-09 12:59:47",
updated_at: "2018-05-09 12:59:47",
course_details: null
},....
这是我的反应本机代码:
fetchData = async () => {
const response = await fetch('http://localhost/elearning/public/api/courses');
const json = await response.json();
this.setState({data: json.course_details});
}
render() {
return (
<View style={styles.container}>
<FlatList
data={this.state.data}
keyExtractor={(x, i) => i}
renderItem={({ item }) =>
<Text>
{'${item.courseDesc}'}
</Text>}
/>
</View>
);
}
这是我的PHP代码:
echo $result->toJson(JSON_PRETTY_PRINT);
已经2天了,我真的需要帮助。我保证会帮助stackoverflow并回馈新的程序员。
答案 0 :(得分:1)
您的后端提供了一个嵌套的对象文字,而不是有效的json对象。
这是有关序列化的laravel文章-> Link
您需要实现的是获取有效的json,例如:
{
"id": "61987",
"active_lesson": "1",
"start_date": "2018-05-09",
"due_date": "2018-05-23",
"grade": "Fail",
"created_at": "2018-05-09 12:59:47",
"updated_at": "2018-09-19 07:12:40",
"course_details": {
"id": 573,
"company_id": null,
"courseDesc": null,
"questionDisplay": "single"
}
}
根据草稿-> link,您可以使用任何在线验证器来检查对象的有效性。
我还建议您仔细研究JSON.stringify方法。
从W3C:
JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以仅包括指定的属性。
考虑在php后端中使用json_encode()method。
toJson信息:
Json Serializer for PHP。这是一个以JSON格式序列化PHP变量的库。它与PHP中的serialize()函数类似,但输出为JSON编码的字符串。您还可以反序列化此工具生成的JSON,并获取PHP内容。
关于如何在您的php后端中处理Json的问题,article很不错-也许值得一读。
编辑:
可能是您的请求返回的是HTML而不是JSON,而当您尝试解析它时,第一个字符将是<,对于JSON字符串已经无效。