所以我最近开始学习Visual Basic,并且正在测试解析HTML数据只是为了一点乐趣。当我进入一些JSON时,我下载了牛顿软包并开始学习它是如何工作的。我开始只是试图获取任何用户的Instagram页面的URL,但是出现了一个我似乎无法解决的错误,而且我是VB的新手,我认为最好是寻求一些帮助而不是让我不知所措。
以下是代码:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QPushButton;
class Hover;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void hover();
private:
QPushButton* pb;
Hover* h;
};
#endif // MAINWINDOW_H
所以我在这一行得到错误:
#include "mainwindow.h"
#include "hover.h"
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
pb = new QPushButton("Button", this);
connect(pb, SIGNAL(clicked(bool)), this, SLOT(hover()));
}
MainWindow::~MainWindow() {}
void MainWindow::hover()
{
QPropertyAnimation* a = new QPropertyAnimation(pb, "geometry");
a->setDuration(1000);
a->setStartValue(QRect(0, 0, pb->width(), pb->height()));
a->setEndValue(QRect(50, 50, pb->width(), pb->height()));
a->start();
h = new Hover(pb);
h->setGeometry(300, 300, 50, 100);
h->show();
}
Saying:Newtonsoft.Json.JsonReaderException:'读完JSON内容后遇到的其他文本:;。路径'',第1行,第3220位。' 位置编号总是在变化。但我不确定为什么会这样。
任何帮助我都很感激!
编辑: Json对于everybodies instagram帐户是不同的,但这里的例子是Fifa的Json: https://pastebin.com/J3U0uz4S
答案 0 :(得分:1)
这里有几个问题。
主要问题是你的JSON字符串在最后的右括号后面以分号字符(;
)结尾,这是无效的JSON。 (参见JSON.org。)解析器显然没有预料到这一点,所以它抛出一个异常,告诉你在JSON结束后有内容的附加文本(分号)。因此,您需要在反序列化之前去掉这个额外的字符。
json = json.TrimEnd(";")
修复后,第二个问题是您的模型与JSON不匹配。看起来您正在尝试反序列化user
数据,但该数据嵌套在JSON中的几个级别。您需要类来表示这些外层。您不一定需要在每个级别添加每个属性 - 只是您感兴趣的属性 - 但是您确实需要从根目录到目标对象的所有级别,以便正确地反序列化它
顺便说一句,Visual Studio具有可以从JSON示例为您生成类的功能。只需将您的JSON复制到剪贴板,然后从Paste JSON As Classes
菜单中选择Edit -> Paste Special
即可。注意这个工具不是万无一失的;生成的类有时需要一些手动更正。特别是,该工具不正确地生成数组属性。但是,当您使用复杂的JSON结构时,它可以为您提供一个很好的开端。
以下是从您的JSON反序列化基本user
数据所需的最小类结构。 (请注意,我省略了media
属性;如果要获取该数据,则需要定义更多类。)
Public Class Rootobject
Public Property entry_data As Entry_Data
End Class
Public Class Entry_Data
Public Property ProfilePage As List(Of Profilepage)
End Class
Public Class Profilepage
Public Property user As User
End Class
Public Class User
Public Property biography As String
Public Property blocked_by_viewer As Boolean
Public Property country_block As Boolean
Public Property external_url As String
Public Property external_url_linkshimmed As String
Public Property followed_by As Followed_By
Public Property followed_by_viewer As Boolean
Public Property follows As Follows
Public Property follows_viewer As Boolean
Public Property full_name As String
Public Property has_blocked_viewer As Boolean
Public Property has_requested_viewer As Boolean
Public Property id As String
Public Property is_private As Boolean
Public Property is_verified As Boolean
Public Property profile_pic_url As String
Public Property profile_pic_url_hd As String
Public Property requested_by_viewer As Boolean
Public Property username As String
Public Property connected_fb_page As Object
End Class
Public Class Followed_By
Public Property count As Integer
End Class
Public Class Follows
Public Property count As Integer
End Class
完成后,您可以反序列化并获取个人资料图片,如下所示:
' Deserialize into the Rootobject class
Dim root As Rootobject = JsonConvert.DeserializeObject(Of Rootobject)(json)
' Drill down to get the profile pic
Dim picture As String = root.entry_data.ProfilePage(0).user.profile_pic_url_hd