[英]My PHP/ Mysql JSON output format is not the same format as sample JSON page as needed for a flutter app
所以我使用 flutter 應用程序從網頁中提取 JSON。 當我將應用程序指向:htttps://jsonplaceholder.typicode.com/posts 時,它 100% 工作,output 如下(縮短):
[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
}
]
當我指向我自己的測試站點時,output如下:
[{"userId":"1","id":"1","title":"TEST for Title","body":"Test for Body"},{"userId":"1","id":"2","title":"TEST for Title","body":"Test for Body"},{"userId":"1","id":"3","title":"TEST for Title","body":"Test for Body"},{"userId":"1","id":"4","title":"TEST for Title","body":"Test for Body"},{"userId":"1","id":"5","title":"TEST for Title","body":"Test for Body"},{"userId":"1","id":"6","title":"TEST for Title","body":"Test for Body"}]
PHP 代碼如下所示:
$sql = "select supplier_id as userId, id, 'TEST for Title' as title, 'Test for Body' as body from sales_orders";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
$rows = $result->fetch_all(MYSQLI_ASSOC);
header('Content-type: application/json');
echo json_encode($rows);
我看到的唯一真正的區別是間距布局,整數周圍沒有“”。
在這個上敲我的頭。
我可以在 flutter 控制台中從我的站點打印 output,但它不會填充我的應用程序,因為字段名稱完全相同,我只能假設它的 JSONsless 格式導致 mysless 格式。
作為參考,我的 dart 代碼(顫振)如下( https://www.geeksforgeeks.org/http-get-response-in-flutter/ ):
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
//Creating a class user to store the data;
class User {
final int id;
final int userId;
final String title;
final String body;
User({
this.id,
this.userId,
this.title,
this.body,
});
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//Applying get request.
Future<List<User>> getRequest() async {
//replace your restFull API here.
String url = "https://jsonplaceholder.typicode.com/posts";
final response = await http.get(url);
var responseData = json.decode(response.body);
//Creating a list to store input data;
List<User> users = [];
for (var singleUser in responseData) {
User user = User(
id: singleUser["id"],
userId: singleUser["userId"],
title: singleUser["title"],
body: singleUser["body"]);
//Adding user to the list.
users.add(user);
}
return users;
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: Text("Http Get Request."),
leading: Icon(
Icons.get_app,
),
),
body: Container(
padding: EdgeInsets.all(16.0),
child: FutureBuilder(
future: getRequest(),
builder: (BuildContext ctx, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Container(
child: Center(
child: CircularProgressIndicator(),
),
);
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (ctx, index) => ListTile(
title: Text(snapshot.data[index].title),
subtitle: Text(snapshot.data[index].body),
contentPadding: EdgeInsets.only(bottom: 20.0),
),
);
}
},
),
),
),
);
}
}
您可以使用標志JSON_NUMERIC_CHECK
來防止數字引用:
$rows = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($rows, JSON_NUMERIC_CHECK);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.