获取不带字符串名称的jsonarray

Posted

技术标签:

【中文标题】获取不带字符串名称的jsonarray【英文标题】:Get jsonarray without string name 【发布时间】:2020-09-08 12:37:34 【问题描述】:

我需要得到没有字符串名称的 json 数组:

代码选择Sqlite:

public Cursor getAllData() 
    String selectQuery = "Select * from capturas";
    SQLiteDatabase db = new MyHelper(this).getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    return cursor;

代码 Json:

public JSONObject createJsonObject() throws JSONException 
    Cursor cursor = getAllData();
    JSONObject jobj;
    JSONArray arr = new JSONArray();
    cursor.moveToFirst();
    while (cursor.moveToNext()) 
        jobj = new JSONObject();
        jobj.put("sCaptID", cursor.getString(0));
        jobj.put("sName", cursor.getString(1));
        arr.put(jobj);
    
    jobj = new JSONObject();


    jobj.put("data", arr);
    return jobj;

我需要没有“数据”的 jobj.put。

代码 JsonSend

  public void postJsonToServer() throws JSONException 
    JSONObject js = createJsonObject();
    String url = "http://xx.1xx.xx9.xx/server";
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(com.android.volley.Request.Method.POST, url, js, new com.android.volley.Response.Listener<JSONObject>() 

结果 json 为:

 "data":[
    
     "id": "22",
     "name": "test"
]

我需要 json 结果:

    [
    
     "id": "22",
     "name": "test"
]

【问题讨论】:

【参考方案1】:

尝试使用空字符串键

所以替换

jobj.put("data", arr);

jobj.put("", arr);

更新

结果是:[ "id": "22", "name": "test" ] ....--- 我需要 .....---[ "id" :“22”,“名称”:“测试”]

现在尝试使用Google GSON library 来格式化你想要的JSONObject,

将以下依赖项添加到 build.gradle 模块级别。

implementation 'com.google.code.gson:gson:2.8.5'

并将createJsonObject() 更改为:

public JSONObject createJsonObject() throws JSONException 
    Cursor cursor = getAllData();
    JSONObject jobj;
    JSONArray arr = new JSONArray();
    cursor.moveToFirst();
    while (cursor.moveToNext()) 
        jobj = new JSONObject();
        jobj.put("sCaptID", cursor.getString(0));
        jobj.put("sName", cursor.getString(1));
        arr.put(jobj);
    

    Gson gson = new Gson();
    String json = gson.toJson(arr, new TypeToken<JSONArray>() 
    .getType());

    json = "" + json + "";
    jobj = new JSONObject(json);

    return jobj;

【讨论】:

结果是:[ "id": "22", "name": "test" ] ....--- 我需要..... [ "id": "22", "name": "test" ] @MexiCano 请在UPDATE 部分查看更新的答案【参考方案2】:
return jobj.data

而不是

return jobj

我认为这几乎可以解决您的请求,或者您可以使用 JSON.stringify 将其转换为字符串,然后使用 splice/slice 方法将多余部分切掉并使用 JSON.parse 将其转换回数组。但那将是奇怪

【讨论】:

以上是关于获取不带字符串名称的jsonarray的主要内容,如果未能解决你的问题,请参考以下文章

C++如何截取不带后缀的图片名称

Groovyjson 生成器 ( JsonBuilder 生成器 | 生成带根节点名称的 json 字符串 | 生成不带根节点名称的 json 字符串 )

使用 JavaScript 执行带/不带重音字符的文本匹配

utils.js

Python 2.7 获取用户输入并作为不带引号的字符串进行操作

从Dictionary(带有元组字符串[])中获取3个随机值,不带重复项