【发布时间】:2020-11-02 22:50:36
【问题描述】:
Unexpected character () at position 0.
at org.json.simple.parser.Yylex.yylex(Yylex.java:610)
at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:118)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:81)
at org.json.simple.parser.JSONParser.parse(JSONParser.java:75)
at net.ddns.coolpvp.Testing.main(Testing.java:22)
我在 Java 上创建了一个 TCP 服务器,它正在接收一个 json 并给出了这个错误,但我检查了第一个字符是 '{',我该如何解决这个问题?我没有任何线索。如果您能帮助我,我将不胜感激
编辑:JSON 由 .NET Framework 在 C# 应用程序中生成,这是一个 JSON
{"Type":"level-info","LevelNumber":1}
这就是 C# 应用程序生成 JSON 的方式
程序.cs
using System;
using System.Text;
using System.Net.Sockets;
using System.IO;
namespace Testing
{
public static class Program
{
public static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect("localhost", 152);
StreamWriter writer = new StreamWriter(client.GetStream(), Encoding.UTF8) { AutoFlush = true };
writer.WriteLine(new RequestLevelInfo(1).ToJSONString());
client.Close();
Console.ReadKey(true);
}
}
}
RequestLevelInfo.cs
using System.Web.Script.Serialization;
namespace Testing
{
public class RequestLevelInfo
{
public string Type { get { return "level-info"; } }
public int LevelNumber { get; }
public RequestLevelInfo(int level)
{
LevelNumber = level;
}
public string ToJSONString()
{
return new JavaScriptSerializer().Serialize(this);
}
}
}
服务器正在使用 BufferedReader 使用 readLine 方法读取它
package testing;
import java.net.Socket;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class Testing {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 152));
Socket client = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
String dataReceived = reader.readLine();
JSONObject json = (JSONObject)new JSONParser().parse(dataReceived);
System.out.println(json.toJSONString());
client.close();
server.close();
} catch (IOException ex) {
ex.printStackTrace(System.err);
} catch (ParseException ex) {
ex.printStackTrace(System.err);
}
}
}
【问题讨论】:
-
你可以在你的问题中包含你的 JSON 吗?
-
JSON内容是如何生成并发送到服务器的?服务器如何读取它?请在问题中包含代码
-
请同时显示您的 JSON 文件,以便我们查看错误是否是由于 JSON 文件造成的。
-
你是否使用了类似 .writeUTF(String) 的东西,因为这个方法在开头添加了两个字节作为长度,比如 [0x00][0x01][a]?
-
据我所知,错误不是由 JSON 文件引起的,您能否向我们展示一下您读取 JSON 文件时使用的代码?