历史回调如下所示,我需要解析对象响应(消息),下面给出了响应以供参考.对象消息 - 产生没有任何关键字的嵌套数组的参数和带有关键字作为消息的嵌套对象.
pubnub.history(request_id, true, 100, new Callback() {
@Override
public void successCallback(String channel, Object message) {
super.successCallback(channel, message);
Log.e(TAG, "successCallback: History Messages" + message);
}
@Override
public void errorCallback(String channel, PubnubError error) {
super.errorCallback(channel, error);
Log.e(TAG, "successCallback: History Messages error" + error);
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的对象响应消息.
响应:-
[ //array 1
[ // array 2
{ //obj 1
"message":{
"message":"Hai",
"timestamp":1507105493379,
"type":"SENT",
"userId":137
},
"timetoken":15071054937865507
},
{ //object 2
"message":{
"message":"How are you ?",
"timestamp":1507105503320,
"type":"SENT",
"userId":137
},
"timetoken":15071055037143632
}, …Run Code Online (Sandbox Code Playgroud) 尝试使用json.simple库解析以下JSON字符串时:
[
{"id" : "6d7662a9.f8ba04"},
{"id" : "2da98cc2.145ba4"},
{"id" : "45492640.a17d68"}
]
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONArray
Run Code Online (Sandbox Code Playgroud)
这就是我的做法:
JSONArray json = (JSONArray) new JSONParser().parse(jsonString);
Run Code Online (Sandbox Code Playgroud)
JSON字符串是一个数组,因此不确定为什么会引发该异常。
这里有几个类似的问题,但是在他们的情况下,他们试图将a强制转换JSONObject为a,JSONArray因此抛出异常是有意义的,但在这种情况下,它看起来是正确的。
-----------------编辑-----------------
我添加了一行来打印对象的类,如下所示:
Object json = new JSONParser().parse(jsonString);
System.out.println(json.getClass());
Run Code Online (Sandbox Code Playgroud)
打印以下行:
class org.json.simple.JSONArray
Run Code Online (Sandbox Code Playgroud)
在下一行中,如果出现以下情况,则显示为:
if(json instanceof JSONArray) {
System.out.println("This is a JSONArray");
}
Run Code Online (Sandbox Code Playgroud)
但是它不访问if,所以它真的很奇怪,因为首先我检查对象是否为JSONArray,但它不会打印 "This is a JSONArray"
我在通过 okhttp 响应解析字符串结果时遇到问题,我想解析该字符串,但我不知道如何做到这一点。\n有人可以帮助我吗?
\n我正在使用 android studio。
\npublic class MainActivity extends AppCompatActivity {\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0private TextView mTextViewResult;\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0protected void onCreate(Bundle savedInstanceState) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0super.onCreate(savedInstanceState);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0setContentView(R.layout.activity_main);\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0mTextViewResult = findViewById(R.id.text_view_result);\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0OkHttpClient client = new OkHttpClient();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0String url = "https://reqres.in/api/users?page=2";\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0Request request = new Request.Builder()\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0.url(url)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0.build();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0client.newCall(request).enqueue(new Callback() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void onFailure(Call call, IOException e) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0e.printStackTrace();\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void onResponse(Call call, Response response) throws IOException {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0if (response.isSuccessful()) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0final String myResponse = response.body().string();\n\xc2\xa0\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0MainActivity.this.runOnUiThread(new Runnable() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0@Override\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0public void run() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0mTextViewResult.setText(myResponse);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0});\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0});\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n}\nRun Code Online (Sandbox Code Playgroud)\n\nBlock quote\n[{"attributes": {"message": "以下是一些入门资源:\\n\\n -配置 Home Assistant \\n -可用组件\\n -对配置进行故障排除\\n -获取帮助\\n\\n为了将来不再看到此卡弹出窗口,请在 …
我正在为学校做一个像Cleverbot这样的自动聊天客户端.我有一切工作,但我需要一种方法来建立响应的知识库.我打算制作一个矩阵,其中包含我需要机器人的所有响应,但我认为每次我想要添加对机器人的响应时都很难编辑代码.这是我对知识库矩阵的代码:
`String[][] Database={
{"hi","hello","howdy","hey"},//possible user input
{"hi","hello","hey"},//response
{"how are you", "how r u", "how r you", "how are u"},
{"good","doing well"}`
Run Code Online (Sandbox Code Playgroud)
我如何从文本文件中制作这样的矩阵?有没有比从文本文件中读取更好的方法来处理这个问题?
我有一个这样的响应对象:
public class TestResponse {
private final String response;
private final ErrorCodeEnum error;
private final StatusCodeEnum status;
// .. constructors and getters here
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Gson库序列化上述类,如下所示:
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
System.out.println(gson.toJson(testResponseOutput));
Run Code Online (Sandbox Code Playgroud)
我得到的响应如下所示:
{
"response": "{\"hello\":0,\"world\":\"0\"}",
"error": "OK",
"status": "SUCCESS"
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我在json "response"字段中的字符串被转义了。有什么办法可以让gson不要这样做,而是返回一个完整的响应,如下所示:
{
"response": {"hello":0,"world":"0"},
"error": "OK",
"status": "SUCCESS"
}
Run Code Online (Sandbox Code Playgroud)
而且-如果我按上述方式进行操作,是否有任何问题?
注意:我的"response"字符串将始终为JSON字符串或为null,因此我的"response"字符串中只有这两个值。在"response"field中,我可以有任何json字符串,因为此库正在调用rest服务,该服务可以返回任何json字符串,因此我将其存储在string "response"字段中。
这可能太容易了,但我找不到解决方案。如何直接解析string array出JSON对象?
例如,
json = {"names":["John", "Alex", "David"]}
Run Code Online (Sandbox Code Playgroud)
我不能这样做,json.getJSONArray("names")因为它不返回string array.
所以我有这样的json响应:
"data": [
{
"id": 11881,
"date": "2018-03-26T16:22:08",
"date_gmt": "2018-03-26T14:22:08",
"guid": {
"rendered": "http://google.com"
},
"modified": "2018-03-26T16:22:08",
"modified_gmt": "2018-03-26T14:22:08",
"slug": "some text",
"status": "some status",
"type": "post",
"link": "http://google.com",
"title": {
"rendered": "some title"
}
}
]
Run Code Online (Sandbox Code Playgroud)
如果我有这样的类,我如何解析对 POJO 类的这种响应:
public class Response{
private List<Post> data;
}
public class Post{
private String id;
private String date;
private String date_gmt;
private String guid;
}
Run Code Online (Sandbox Code Playgroud)
问题是它有像 guid 和 title 这样的嵌套值,我如何将它解析为一个 POJO 类,我不需要为每个嵌套值创建 pojo ?
我试图在 BeeCrowd 中解决这个问题,而不使用大量的 if/elses。

它包括读取使用中的 3 个输入,例如:
vertebrado
ave
carnivoro
Run Code Online (Sandbox Code Playgroud)
并输出这些输入的对应词。
aguia
Run Code Online (Sandbox Code Playgroud)
我比java更了解python,这将是我在python中的解决方案(有效):
vertebrado
ave
carnivoro
Run Code Online (Sandbox Code Playgroud)
然而,我正在努力用 Java 编写一个好的解决方案。这是我当前的 Java 解决方案(也有效):
aguia
Run Code Online (Sandbox Code Playgroud)
该解决方案的明显问题是,以这种方式填充字典是不切实际的。代码已经很大了。如果dict有很多值,有很多“深度”,那么维护起来就会很困难。
有办法减少吗?dictIE,用几行声明和初始化?
我有这个代码:
$JSONData = json_decode("[\"tes\", \"dfds\", \"array\"]");
print_r("Data = " . $JSONData);
Run Code Online (Sandbox Code Playgroud)
它输出:
Data = Array
Run Code Online (Sandbox Code Playgroud)
我如何打印数组?喜欢:
array(4) {
[0]=>
string(3) "tes"
[1]=>
string(4) "dfds"
[2]=>
string(5) "array"
}
Run Code Online (Sandbox Code Playgroud) 我的数据库中有一些URL,我想使用PHP将它们打印为JSON.如何在我的JSON对象中获得所需的格式而不转义反斜杠?
// Business to get data
...
// print JSON data
echo json_encode($customer, JSON_UNESCAPED_UNICODE);
Run Code Online (Sandbox Code Playgroud)