为了账号安全,请及时绑定邮箱和手机立即绑定

JSONObject 未正确更新

JSONObject 未正确更新

胡子哥哥 2023-08-04 14:52:00
我正在更新 JSONArray 内的 JSONObject 中的值,当更改值时,会更新所有 JSONArray 中的值。有人知道为什么吗? public static void uploadMediaWithThumbnail( final LeagueActivity.UploadingCallback call,                                             final long leagueId,                                             final JSONArray information, final JsonHttpResponseHandler handler) {    final AtomicInteger receivedCount = new AtomicInteger();    receivedCount.set(0);    call.progressCall(10);    getMediaUploadUrl(leagueId, information,  new JsonHttpResponseHandler() {        @Override        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {            try {                call.progressCall(20);                final JSONArray allData = response.getJSONArray("upload_data");                AsyncHttpClient[] clients = new AsyncHttpClient[allData.length()*2];                JSONArray jarr = information;                for (int i = 0; i < allData.length(); i++ ) {                    final String uploadUrl = allData.getJSONObject(i).getString("content_url");                    final String previewUrl = allData.getJSONObject(i).getString("preview_url");                    jarr.getJSONObject(i).put("content", uploadUrl);                    jarr.getJSONObject(i).put("preview", previewUrl);                }                final JSONArray newInfo = shallowCopy(jarr);                Log.d("Log1", newInfo.getJSONObject(1).getString("content"));                Log.d("Log2", newInfo.getJSONObject(0).getString("content"));记录 Log1 和 Log2 时,它们包含相同的链接信息是这样的数据[{"type":"video","format":"mp4","preview_format":"jpg"}, {"type":"video","format":"mp4","preview_format":"jpg"}]AllData 是从 REST HTTP 调用接收到的信息,并且与信息具有相同的长度
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您想要将信息项添加到 JSONObject 中,然后将该对象添加到 JSONArray 中。


    JSONArray jarr = information;


    for (int i = 0; i < allData.length(); i++ ) {

        final String uploadUrl = allData.getJSONObject(i).getString("content_url");

        final String previewUrl = allData.getJSONObject(i).getString("preview_url");


        JSONObject object = new JSONObject();

        object.put("content", uploadUrl);

        object.put("preview", previewUrl);

        jarr.put(i, object);

    }

在 for 循环之后,您可以从键中获取值。


或者,如果 jarr 已经有对象......


    JSONArray jarr = information;


    for (int i = 0; i < allData.length(); i++ ) {

        final String uploadUrl = allData.getJSONObject(i).getString("content_url");

        final String previewUrl = allData.getJSONObject(i).getString("preview_url");


        JSONObject object = new jarr.getJSONObject(i);

        object.put("content", uploadUrl);

        object.put("preview", previewUrl);

        jarr.put(i, object);

    }

这没有经过测试,但应该可以工作。哈哈


查看完整回答
反对 回复 2023-08-04
?
12345678_0001

TA贡献1802条经验 获得超5个赞

尝试这样,


JSONArray jsonArray;

    try {

//here replace with your data object

        jsonArray = new JSONArray(" [{\"type\":\"video\",\"format\":\"mp4\",\"preview_format\":\"jpg\"}, {\"type\":\"video\",\"format\":\"mp4\",\"preview_format\":\"jpg\"}]");

        for (int i = 0; i < jsonArray.length(); i++) {

            JSONObject jsonObject = jsonArray.getJSONObject(i);

            jsonObject.put("content", "test value " + i);

        }

        Log.d("Print test",  jsonArray.getJSONObject(0).toString());

        Log.d("Print test",  jsonArray.getJSONObject(1).toString());

    } catch (

            JSONException e) {

        e.printStackTrace();

    }


查看完整回答
反对 回复 2023-08-04
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信