GVKun编程网logo

json_encode将PHP数组稀疏为JSON数组,而不是JSON对象(php json数组)

10

在本文中,我们将为您详细介绍json_encode将PHP数组稀疏为JSON数组,而不是JSON对象的相关知识,并且为您解答关于phpjson数组的疑问,此外,我们还会提供一些关于Android-Gs

在本文中,我们将为您详细介绍json_encode将PHP数组稀疏为JSON数组,而不是JSON对象的相关知识,并且为您解答关于php json数组的疑问,此外,我们还会提供一些关于Android-Gson解析JSON数据(JSON对象/JSON数组)、echo json_encode回到json对象,在前端获取到的却是字符串,而非json对象、echo json_encode返回json对象,在前端获取到的却是字符串,而非json对象、fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化的有用信息。

本文目录一览:

json_encode将PHP数组稀疏为JSON数组,而不是JSON对象(php json数组)

json_encode将PHP数组稀疏为JSON数组,而不是JSON对象(php json数组)

我在PHP中有以下数组:

Array(    [0] => Array        (            [id] => 0            [name] => name1            [short_name] => n1        )    [2] => Array        (            [id] => 2            [name] => name2            [short_name] => n2        ))

我想将其JSON编码为JSON数组,产生类似以下内容的字符串:

[      {          "id":0,        "name":"name1",        "short_name":"n1"    },    {          "id":2,        "name":"name2",        "short_name":"n2"    }]

但是当我调用json_encode此数组时,得到以下信息:

{      "0":{          "id":0,        "name":"name1",        "short_name":"n1"    },    "2":{          "id":2,        "name":"name2",        "short_name":"n2"    }}

这是一个对象而不是数组。

我怎样才能json_encode将我的数组编码为数组呢?

答案1

小编典典

您正在观察此行为,因为您的数组不是顺序的-它具有键02,但没有1键。

仅具有数字索引是不够的。json_encode仅当您的PHP数组是顺序的时,即如果其键为0、1、2、3,…时,才会将PHP数组编码为JSON数组。

您可以使用array_values函数顺序地对数组重新索引以获得所需的行为。例如,以下代码在您的用例中可以成功运行:

echo json_encode(array_values($input)).

Android-Gson解析JSON数据(JSON对象/JSON数组)

Android-Gson解析JSON数据(JSON对象/JSON数组)

上一篇博客,Android-解析JSON数据(JSON对象/JSON数组),介绍了使用 org.json.JSONArray;/org.json.JSONObject; 来解析JSON数据;

 

Google Android 还提供来另外一种方式来解析JSON数据,那就是Gson;

Gson是非常方便的JSON解析/封装/处理等等,强大的工具类:

  特点:Gson可以把JSON对象数据->转换映射为Bean对象

       Gson可以把JSON数组数据->转换映射为集合

     Gson可以把Bean对象->转换为JSON对象数据

     Gson可以把集合->转换为JSON数组数据

        ........... 

 

首先要在app/build.gradle配置文件中,导入,Gson支持包

// Gson支持包的导入
implementation ''com.google.code.gson:gson:2.6.2''

 


 

需要解析的JSON数据:

/data/data/liudeli.mynetwork01/files/pottingJSON1

{
    "name":"李四",
    "age":99,
    "hobby":"爱好是练习截拳道"
}

 

/data/data/liudeli.mynetwork01/files/pottingJSONArray1

[
    {
        "name":"君君",
        "age":89,
        "sex":"男"
    },
    {
        "name":"小君",
        "age":99,
        "sex":"女"
    },
    {
        "name":"大君",
        "age":88,
        "sex":"男"
    }
]

 

定义一个Bean
定义的name/age/hobby 必须要和JSON数据里面的一模一样 

package liudeli.mynetwork01.entity;

/**
 * 定义一个Bean
 * 定义的name/age/hobby 必须要和JSON数据里面的一模一样
 * {
 *     "name":"李四",
 *     "age":99,
 *     "hobby":"爱好是练习截拳道"
 * }
 */
public class Student2 {

    private String name;
    private int age;
    private String hobby;

    public Student2(String name, int age, String hobby) {
        this.name = name;
        this.age = age;
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=''" + name + ''\'''' +
                ", age=" + age +
                ", hobby=''" + hobby + ''\'''' +
                ''}'';
    }
}

  

定义的name/age/sex 必须要和JSON数据里面的一模一样

package liudeli.mynetwork01.entity;

/**
 * 定义一个Bean
 * 定义的name/age/sex 必须要和JSON数据里面的一模一样
 *
 * [
 *     {
 *         "name":"君君",
 *         "age":89,
 *         "sex":"男"
 *     },
 *     {
 *         "name":"小君",
 *         "age":99,
 *         "sex":"女"
 *     },
 *     {
 *         "name":"大君",
 *         "age":88,
 *         "sex":"男"
 *     }
 * ]
 */
public class Student {

    private String name;
    private int age;
    private String sex;

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name=''" + name + ''\'''' +
                ", age=" + age +
                ", sex=''" + sex + ''\'''' +
                ''}'';
    }
}

 

GsonAnalyzeJSONActivity.java

package liudeli.mynetwork01;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;

import liudeli.mynetwork01.entity.Student;
import liudeli.mynetwork01.entity.Student2;

public class GsonAnalyzeJSONActivity extends Activity {

    private final String TAG = GsonAnalyzeJSONActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_gson_analyze);
    }

    /**
     * Gson解析JSON对象
     * {
     *     "name":"李四",
     *     "age":99,
     *     "hobby":"爱好是练习截拳道"
     * }
     */
    public void gonsAnalyzeJSONObject(View view) {
       String jsonData = readFile("pottingJSON1");
       // Log.d(TAG, "jsonData:" + jsonData);

       Gson gson = new Gson();
       Student2 student2 = gson.fromJson(jsonData, Student2.class);
       Log.d(TAG, "gonsAnalyzeJSONObject 解析后的结果:" + student2.toString());
    }

    /**
     * Gson解析JSON数组
     * [
     *     {
     *         "name":"君君",
     *         "age":89,
     *         "sex":"男"
     *     },
     *     {
     *         "name":"小君",
     *         "age":99,
     *         "sex":"女"
     *     },
     *     {
     *         "name":"大君",
     *         "age":88,
     *         "sex":"男"
     *     }
     * ]
     * @param view
     */
    public void gonsAnalyzeJSONArray(View view) {
        String jsonData = readFile("pottingJSONArray1");
        // Log.d(TAG, "jsonData:" + jsonData);

        Gson gson = new Gson();

        /**
         * TypeToken<List<需要映射的Bean对象>>(){}.getType()
         */
        List<Student> list = gson.fromJson(jsonData, new TypeToken<List<Student>>(){}.getType()); // 参数二:需要指定类型,类型来决定解析的集合

        for (Student student: list) {
            Log.d(TAG, "gonsAnalyzeJSONArray 解析后的结果:" + student.toString());
        }

    }

    /**
     * 读取文件里面的字符串
     * @param fileName
     * @return
     */
    private String readFile(String fileName) {
        String result = null;
        try {
            InputStream inputStream = openFileInput(fileName);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            byte[] bytes = new byte[inputStream.available()];

            inputStream.read(bytes);

            baos.write(bytes, 0,bytes.length);

            result = new String(baos.toByteArray());

            baos.close();
            inputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

 

activity_gson_analyze.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gson解析JSON对象"
        android:onClick="gonsAnalyzeJSONObject"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gson解析JSON数组"
        android:onClick="gonsAnalyzeJSONArray"
        />

</LinearLayout>

 

日志的打印:

使用Gson解析,JSON对象数据:

12-23 23:00:52.108 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONObject 解析后的结果:Student{name=''李四'', age=99, hobby=''爱好是练习截拳道''}

 

使用Gson解析,JSON数组数据:

12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''君君'', age=89, sex=''男''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''小君'', age=99, sex=''女''}
12-23 23:00:53.199 9729-9729/liudeli.mynetwork01 D/GsonAnalyzeJSONActivity: gonsAnalyzeJSONArray 解析后的结果:Student{name=''大君'', age=88, sex=''男''}

 

echo json_encode回到json对象,在前端获取到的却是字符串,而非json对象

echo json_encode回到json对象,在前端获取到的却是字符串,而非json对象

echo json_encode返回json对象,在前端获取到的却是字符串,而非json对象
前端使用一下代码提交并处理后续结果

<br />
function del(id){<br />
      if(confirm(''确认要删除此关键字吗?'')){<br />
		$.post(''./keyword'',{ op:''del'',id:id },function(result){<br />
			alert(result); //正常这个部分应该显示的是object:object,但现在显示的是一个字符串<br />
			if( result.code != 0 ){<br />
				alert("删除失败!");<br />
			}else{<br />
				location.reload();<br />
			}<br />
		});<br />
	}<br />
}<br />
<br />
登录后复制

服务端使用以下代码返回
<br />
echo json_encode(array("code"=>0));<br />
exit;<br />
登录后复制


正常情况下在前端alert result这个变量,应该显示的是object:object,可现在显示的却是这个json字符串。

分享到: 更多


------解决方案--------------------
$.post(''./keyword'',{ op:''del'',id:id },function(result){...}, ''json'');
------解决方案--------------------
<br />
<br />
function del(id){<br />
      if(confirm(''确认要删除此关键字吗?'')){<br />
		$.post(''./keyword'',{ op:''del'',id:id },function(result){<br />
			alert(result); //正常这个部分应该显示的是object:object,但现在显示的是一个字符串<br />
			if( result.code != 0 ){<br />
				alert("删除失败!");<br />
			}else{<br />
				location.reload();<br />
			}<br />
		},"json");<br />
	}<br />
}<br />
<br />
<br />
登录后复制

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
收藏 点赞
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
  • 简化 React 状态管理:处理状态的最佳实践
    2024-09-11 13:40:05
  • word在中间插字就会消失一个字怎么办
    2024-07-17 21:28:11
  • 微信怎么注销微信支付 微信注销微信支付的方法
    2024-07-16 10:20:46
  • 惠普强势登陆2024德鲁巴印刷展 与Canva可画达成全球合作
    2024-05-29 08:13:13
  • 《鸣潮》卡卡罗角色攻略
    2024-05-25 09:37:24
  • 华硕bios升级中途关机没法开机了?
    2024-05-24 20:31:46
  • ps怎么调亮背光图片 ps调亮背光图片教程
    2024-05-11 10:28:35
  • win10启动项开启方法
    2023-12-29 17:08:12
  • 全新雷克沙ARES电竞超频内存来了,打造极致体验
    2023-12-15 19:23:35
  • PHP中如何处理缓存错误?
    2023-12-02 11:08:01
最新问题
就写一个为啥开头不写结束符号 ?> 就写一个<?php 为啥开头不写结束符号   ?>   就写一个<?php
P粉052048067来自于2024-09-11 18:01:19
0 0 69
按照老师的方法不传值给TP6后台,再接收参数。出现以下错误。怎么办 http://localhost/index.php/admin/index/userliste 的远程资源。(原因:CORS 头缺少 ''Access-Control-Al...
凡人来自于2024-07-09 15:20:49
1 39 1703
请问写php项目都要用到git吗 请问写php项目都要用到git吗
PHP中文网用户-4202961来自于2024-06-11 14:28:59
0 57 2326
请问能提供下源码么 请问能提供下源码么?想对照着看
周珂儿来自于2024-06-06 08:56:32
0 47 2080
为什么我用的laravel10不走handle文件中的render方法,无法输出断点内容 为什么我用的laravel10不走handle文件中的render方法,无法输出断点内容
许飞来自于2024-06-02 14:41:32
0 50 1615
小鱼AI助手免费使用!http://ai.52xuejs.cn/#/chat 小鱼AI助手免费使用!http://ai.52xuejs.cn/#/chat
会飞的汤姆来自于2024-05-28 03:09:58
0 47 2170
function_exists()无法判定自定义函数 function test()    {        return true;    } ...
凡人来自于2024-04-29 11:01:01
0 64 3066
google 浏览器 手机版显示的怎么实现 老师您好,google 浏览器怎么变成手机版样式的?
艾尼宛尔.亚森来自于2024-04-23 00:22:19
0 51 2816
子窗口操作父窗口,输出没反应 前两句可执行,最后一句没法应
P粉722478067来自于2024-04-19 15:37:47
0 49 2610
父窗口没有输出 document.onclick = function(){ window.opener.document.write(''我是子窗口的输出'');  &nb...
P粉722478067来自于2024-04-18 23:52:34
0 47 2454
相关专题
更多>
  • 支付宝转账限额介绍
  • word怎么在方框中打√符号
  • 1tb是多少g内存
  • 快手小店如何关闭
  • 微信转账一天最多能转多少钱
  • 手机数据线连接电脑为什么没反应
  • 电脑开机为什么显示英文不动
  • 苹果手机app如何恢复旧版本

echo json_encode返回json对象,在前端获取到的却是字符串,而非json对象

echo json_encode返回json对象,在前端获取到的却是字符串,而非json对象

前端使用一下代码提交并处理后续结果

function del(id){ if(confirm(''确认要删除此关键字吗?'')){ $.post(''./keyword'',{ op:''del'',id:id },function(result){ alert(result); //正常这个部分应该显示的是object:object,但现在显示的是一个字符串 if( result.code != 0 ){ alert("删除失败!"); }else{ location.reload(); } }); }}
登录后复制

服务端使用以下代码返回
echo json_encode(array("code"=>0));exit;
登录后复制


正常情况下在前端alert result这个变量,应该显示的是object:object,可现在显示的却是这个json字符串。


回复讨论(解决方案)

$.post(''./keyword'',{ op:''del'',id:id },function(result){...}, ''json'');

function del(id){ if(confirm(''确认要删除此关键字吗?'')){ $.post(''./keyword'',{ op:''del'',id:id },function(result){ alert(result); //正常这个部分应该显示的是object:object,但现在显示的是一个字符串 if( result.code != 0 ){ alert("删除失败!"); }else{ location.reload(); } },"json"); }}
登录后复制

fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串与JSON对象互相转换,自己在这一方面的概念总是很混乱,最近看源码和博客,在此记录一下。注意:全程用的是fastjson

首先JSON有两种格式,一种是对象格式,一种是对象数组。

在JSON使用中主要的3个类:JSONJSONObjecJSONArray

其中JSONObjecJSONArray继承于JSON的。

JSON对象(JSONObject)

{"id":1,"name":"chen"}

JSON对象数组(JSONArray)

[ {"id":1,"name":"chen"}, {"id":2,"name":"张三"}]

下面直接进入正题:

Java Bean 和JSON字符串的互转

Java Bean 转 JSON字符串

Java Bean是指Java中的一个普通对象(实体类)例如:

public class Student{ private String name; // 姓名 private Integer age; // 年龄  public void setName(String name){  this.name = name; } public String getName(){  return name; } public void setAge(Integer age){  this.age = age; } public Integer getAge(){  return age; } @Override public String toString() {  return "Student{" + "name=''" + name + ''\'''' + ", age=" + age + ''}''; }}

使用JSON类的toJSONString()方法,实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。仔细观察源码发现,该方法经过多次重载,但最终都是实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。

@Testpublic void BeanToJSONTest(){ Student student = new Student(); student.setName("小明"); student.setAge(20);  String s1 = JSON.toJSONString(student); St..............

我们今天的关于json_encode将PHP数组稀疏为JSON数组,而不是JSON对象php json数组的分享就到这里,谢谢您的阅读,如果想了解更多关于Android-Gson解析JSON数据(JSON对象/JSON数组)、echo json_encode回到json对象,在前端获取到的却是字符串,而非json对象、echo json_encode返回json对象,在前端获取到的却是字符串,而非json对象、fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化的相关信息,可以在本站进行搜索。

本文标签:

上一篇Java process.waitFor()从不返回(java process.waitfor返回值)

下一篇在PHP中使用cURL进行RAW POST(php curl用法)