繁体   English   中英

My PHP/ Mysql JSON output format is not the same format as sample JSON page as needed for a flutter app

[英]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);

php代码在线

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM