【问题标题】:JSON reader expected name but was stringJSON 阅读器预期名称,但为字符串
【发布时间】:2020-03-05 08:55:49
【问题描述】:

我的 JSON 是:

{
        "type": "Point",
        "coordinates": [
          [
            16.990586757110702,
            52.336268037215298
          ]
        ]
 },

我的代码:


    private double[] readGeometry(JsonReader reader) throws IOException{
        double coordinates[] = new double[2];
        reader.beginObject();
        while (reader.hasNext()){
            String name = reader.nextName() ;
            if (name == "coordinates"){
                reader.beginArray();
                reader.beginArray();
                coordinates[0] = reader.nextDouble();
                coordinates[1] = reader.nextDouble();
                reader.endArray();
                reader.endArray();
            }
        }
        reader.endObject();
        return coordinates;
    }

type 正确读取。在coordinates 我得到expected Name but was String error。 当我手动迭代它时,reader.nextString() 方法不起作用。怎么回事?

更新 解决: 我需要处理 JSON 的每一部分,这是正确的工作代码:

double coordinates[] = new double[2];
        reader.beginObject();
        while (reader.hasNext()){
            String name = reader.nextName();
            if (name.equals("coordinates")){
                reader.beginArray();
                reader.beginArray();
                coordinates[0] = reader.nextDouble();
                coordinates[1] = reader.nextDouble();
                reader.endArray();
                reader.endArray();
            }
            else if (name.equals("type")){
                reader.nextString();
            }
        }
        reader.endObject();
        return coordinates;

【问题讨论】:

    标签: android json android-studio


    【解决方案1】:

    看看这是否适合你。

    下面是我在本地解析的你的json:

    {
        "type": "Point",
        "coordinates": [
          [
            16.990586757110702,
            52.336268037215298
          ]
        ]
    }
    
    

    这是我根据你的 json 创建的模型类。

    // To parse this JSON data, do
    //
    //     final point = pointFromJson(jsonString);
    
    import 'dart:convert';
    
    Point pointFromJson(String str) => Point.fromJson(json.decode(str));
    
    String pointToJson(Point data) => json.encode(data.toJson());
    
    class Point {
        String type;
        List<List<double>> coordinates;
    
        Point({
            this.type,
            this.coordinates,
        });
    
        factory Point.fromJson(Map<String, dynamic> json) => Point(
            type: json["type"],
            coordinates: List<List<double>>.from(json["coordinates"].map((x) => List<double>.from(x.map((x) => x.toDouble())))),
        );
    
        Map<String, dynamic> toJson() => {
            "type": type,
            "coordinates": List<dynamic>.from(coordinates.map((x) => List<dynamic>.from(x.map((x) => x)))),
        };
    }
    
    

    后来我解析了 json 并将它们添加到列表中:

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:sample_project_for_api/model.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'Flutter Demo',
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      Point yourpoint = new Point();
      bool _isLoading = false;
    
      List<double> coordinates = List();
    
      @override
      void initState() {
        super.initState();
        yourMethod();
      }
    
      yourMethod() async {
        String jsonString = await loadFromAssets();
    
        final point = pointFromJson(jsonString);
        yourpoint = point;
    
        for (int i = 0; i < yourpoint.coordinates.length; i++) {
          for (int j = 0; j < yourpoint.coordinates[i].length; j++) {
            print(yourpoint.coordinates[i][j]);
            coordinates.add(yourpoint.coordinates[i][j]);
          }
        }
    
        for(int i=0;i<coordinates.length;i++)
        {
          print('Your cordinates are $i :${coordinates[i]}');
        }
    
    
      }
    
      Future<String> loadFromAssets() async {
        return await rootBundle.loadString('json/parse.json');
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('title'),
          ),
          body: Text('sample'),
        );
      }
    }
    
    

    让我知道它是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多