如果您想了解php解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Go生成json、解析
如果您想了解php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Go生成json、解析json和多维json数组解析、java – 使用JSON.org解析器从HttpClient请求解析JSON、java中使用fastjson、jackson、json-lib解析JSON-------------------妈妈再也不用担心JSON解析、Java解析JSON并修改属性值:从JSON到JsonObject的逐层解析的有价值的信息。
本文目录一览:- php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)
- Go生成json、解析json和多维json数组解析
- java – 使用JSON.org解析器从HttpClient请求解析JSON
- java中使用fastjson、jackson、json-lib解析JSON-------------------妈妈再也不用担心JSON解析
- Java解析JSON并修改属性值:从JSON到JsonObject的逐层解析
php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)
$str2=''{"code":200,"datas":{"id":1,"coupon_id":"123","validity":"2018-08-14","is_use":0,"source":"2","create_time":"2018-08-14 15:06:40"}}'';
var_dump(json_decode($str2)); //输出为 NULL
json在线解析器去掉两边单引号是可以解析的
但是实际代码运行,不论是直接json_decode()还是去掉两边单引号都无法解析.
造成这种问题的源头就是bom头,返回的结果是带bom头的utf8格式的数据,因此只要去除bom头就好了,添加一个方法:
function clearBom($str){
$bom = chr(239).chr(187).chr(191);
return str_replace($bom ,'''',$str);
}
然后问题就解决了
$str2=''{"code":200,"datas":{"id":1,"coupon_id":"123","validity":"2018-08-14","is_use":0,"source":"2","create_time":"2018-08-14 15:06:40"}}'';
var_dump(json_decode(clearBom($str2)));
结果如下:
object(stdClass)#1 (2) {
["code"]=>
int(200)
["datas"]=>
object(stdClass)#2 (6) {
["id"]=>
int(1)
["coupon_id"]=>
string(3) "123"
["validity"]=>
string(10) "2018-08-14"
["is_use"]=>
int(0)
["source"]=>
string(1) "2"
["create_time"]=>
string(19) "2018-08-14 15:06:40"
}
}
Go生成json、解析json和多维json数组解析
go生成和解析json结构是按结构体模式解析的,所以结构体类型一定要多练习熟悉。
完整代码(可以运行):
// +build ignore
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
}
type Family struct {
Persons []Person
}
func main() {
// 根据结构体生成json
manJson := Person{
Name: "Elinx",
Age: 26,
}
man, _ := json.Marshal(manJson)
fmt.Println(string(man))
// 解析json到结构体
jsonStr := []byte(`{"Name":"Elinx","Age":26}`)
var man2 Person
json.Unmarshal(jsonStr, &man2)
fmt.Println(man2)
// 解析json数组到切片(数组)
jsonArrStr := []byte(`[{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}]`)
var jsonSlice []map[string]interface{}
json.Unmarshal(jsonArrStr, &jsonSlice)
fmt.Println(jsonSlice)
// 解析多维数组
var f Family
// 模拟传输的Json数据
familyJSON := `{"Persons": [{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}] }`
fmt.Println("======================")
// 解析字符串为Json
json.Unmarshal([]byte(familyJSON), &f)
// 直接输出并不会展示全部层级,原因待考究
fmt.Println(f)
// 从新生成json字符串查看真实结构
jsons, _ := json.Marshal(f)
fmt.Println(string(jsons))
}
直接解析单键json
可以使用直接json转map结构
// 直接解析json单key结构,不使用结构体
uploadJSON := `{"xxxx": "test","zzzz": "1111111"}`
var jsonSlice2 map[string]interface{}
json.Unmarshal([]byte(uploadJSON), &jsonSlice2)
fmt.Println(jsonSlice2)
参考文献
1.go json字符串转切片
2.golang生成JSON及解析JSON
java – 使用JSON.org解析器从HttpClient请求解析JSON
这是返回JSON的代码
import lotus.domino.*; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; Session session = getSession(); AgentContext agentContext = session.getAgentContext(); HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet("http://api.acme.com/customer"); request.addHeader("accept","application/json"); request.addHeader("Host","api.acme.com"); request.addHeader("X-Api-Version","1.0"); request.addHeader("Authorization","Basic ..."); HttpResponse response = client.execute(request);
JSON看起来像这样.
[ { "id": 123456,"insertDate": "2014-05-12T16:51:38.343","read": false,"site": "acme.com","Email": "john.doe@acme.com","location": "/customer/1212?v=1.0" } ]
我曾尝试使用JSON.org中的JSONObject和JSONArray但无法使其工作
我需要一些来自json.org包的示例代码或其他解析json的方法.
解决方法
String json = IoUtils.toString(response.getEntity().getContent()); JSONArray array = new JSONArray(json); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); log.info("the id is {}",object.getInt("id")); log.info("the insertDate is {}",object.getString("insertDate")); log.info("read is {}",object.getBoolean("read")); log.info("the site is {}",object.getString("site")); log.info("the Email is {}",object.getString("Email")); log.info("the location is {}",object.getString("location")); }
我在http://jsonblob.com/537a43bfe4b047fa2ef5f15d将JSON保存在JSONBlob中并创建了一个请求JSON的单元测试:
import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IoUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Test; @Slf4j public class JsonTest { @Test public void test() throws Exception { HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet("http://jsonblob.com/api/jsonBlob/537a43bfe4b047fa2ef5f15d"); request.addHeader("accept","application/json"); HttpResponse response = client.execute(request); String json = IoUtils.toString(response.getEntity().getContent()); JSONArray array = new JSONArray(json); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); log.info("the id is {}",object.getInt("id")); log.info("the insertDate is {}",object.getString("insertDate")); log.info("read is {}",object.getBoolean("read")); log.info("the site is {}",object.getString("site")); log.info("the Email is {}",object.getString("Email")); log.info("the location is {}",object.getString("location")); } } }
运行它的输出是:
11:23:19.508 [main] INFO JsonTest - the id is 123456 11:23:19.516 [main] INFO JsonTest - the insertDate is 2014-05-12T16:51:38.343 11:23:19.516 [main] INFO JsonTest - read is false 11:23:19.516 [main] INFO JsonTest - the site is acme.com 11:23:19.516 [main] INFO JsonTest - the Email is john.doe@acme.com 11:23:19.516 [main] INFO JsonTest - the location is /customer/1212?v=1.0
我使用IOUtils类来转换来自HttpResponse实体的InputStream,但是无论如何你都可以这样做(并且像我那样转换它可能不是最好的想法,具体取决于JSON的大小).
java中使用fastjson、jackson、json-lib解析JSON-------------------妈妈再也不用担心JSON解析
1、fastjson
引入包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.16</version>
</dependency>
JSON字符串转JSONObject/JSONArray
JSONObject jsonObject = JSONObject.parseObject(jsonString);
得到子节点
jsonObject .getString();
jsonObject .getArray();
jsonObject .getDate();
.....
转为javaBean
JSONObject.toJavaObject(jsonObject,JavaBean.class);
JSON字符串直接转JavaBean
JSONObject.parseObject(jsonString,javaBean.class);
JavaBean转JSON字符串
String jsonString = JSONObject.toJSONString(javaBean)
2、jackson
引入的包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
JSON字符串装javaBean
objectMapper = new ObjectMapper();
JavaBean javaBean= objectMapper.readValue(jsonString, JavaBean.class);
javaBean转JSON字符串
objectMapper = new ObjectMapper();
//writeObject可以转换java对象,eg:JavaBean/Map/List/Array等
String jsonString = objectMapper.writeValueAsString(bean);
控制台打印:
jsonGenerator.writeObject(bean);
//writeValue具有和writeObject相同的功能
objectMapper.writeValue(System.out, bean);
获取子节点
ObjectMapper mapper = new ObjectMapper();
// 读取json,将整个json作为根节点
JsonNode node = mapper.readTree(jsonString);
node.path();
node.get();
1. //如果属性没有值,那么Json是会处理的,int类型为0,String类型为null,数组为[],设置这个特性可以忽略空值属性
2. mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
3. //让Json可以缩进,可读性更好,一般用在测试和开发阶段。
4. mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
5. //让map的key按自然顺序排列
6. mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
7. //日期输出格式
8. SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
9. mapper.setDateFormat(outputFormat);
创建节点,生成JSON字符串
1. //创建一个提供所有节点的JsonNodeFactory,false表示不创建DecimalNode
2. JsonNodeFactory factory = new JsonNodeFactory(false);
3.
4. // 创建JsonFactory,使用Streaming API的方式输出到控制台
5. JsonFactory jsonFactory = new JsonFactory();
6. JsonGenerator generator = jsonFactory.createGenerator(System.out);
7. ObjectMapper mapper = new ObjectMapper();
8.
9. //创建节点和数据,一个ObjectNode代表一个节点对象
10. ObjectNode node1 = factory.objectNode();
11. ObjectNode node2 = factory.objectNode();
12. node1.put("A", "a");
13. node1.put("B", "b");
14. node2.set("C", node1);
15.
16. // 根节点
17. ObjectNode root = factory.objectNode();
18. root.put("root", "root");
19. root.set("children", node2);
20. mapper.writeTree(generator, root);
21. //输出{"root":"root","children":{"C":{"A":"a","B":"b"}}}
其他数组、list、map参考
http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html
http://blog.csdn.net/gjb724332682/article/details/51586701
3、json-lib
使用的包
<!--json-lib-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
JSON字符串转JSONObject/JSONArray
JSONObject jsonObject = JSONObject.fromObject(jsonString/javaBean);
得到子节点
jsonObject.getString("success")
转为javaBean
JSONObject.toBean(jsonObject,JavaBean.class);
javaBean转JSON字符串
String jsonString=jsonObject.toString();
list map参照
http://www.cnblogs.com/teach/p/5791029.html
Java解析JSON并修改属性值:从JSON到JsonObject的逐层解析
哈喽,大家好,我是木头左!
在Java中,可以使用各种库来解析和操作JSON数据。其中,Gson和Jackson是两个非常流行且功能强大的库。在这篇文章中,将使用Gson库来解析给定的JSON字符串,修改operationButtons
数组中的第一个元素的isShow
属性值为false
,然后将修改后的对象转换回JSON字符串。
准备工作:引入Gson库
确保你已经将Gson库添加到项目的依赖中。如果你使用的是Maven,可以在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
解析JSON为JsonObject
接下来,将使用Gson库将给定的JSON字符串解析为JsonObject
对象。需要创建一个JsonParser
对象,然后调用其parse()
方法。
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
String jsonString = "{\"tableConfig\": {\"toolbar\": {\"batchOperation\": null, \"showRightWidgetSlot\": false, \"displayType\": \"both\", \"operationButtons\": [{\"name\": \"导出\", \"icon\": \"h-icon-export\", \"code\": \"export\", \"value\": \"548a94d7-1024-11ef-ab38-b17b4743f06f\", \"isInner\": true, \"btnType\": \"button\", \"operation\": {\"clickType\": \"custom\", \"pageJump\": null, \"interfaceUrl\": null, \"dialog\": null, \"clickCode\": null, \"secondDialogContent\": null, \"paramFields\": null}, \"mainButton\": false, \"position\": \"left\", \"editAbled\": false, \"isShow\": true, \"configIsShow\": true}]}}";
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(jsonString).getAsJsonObject();
逐层解析并修改属性值
现在已经有了一个JsonObject
对象,接下来需要逐层解析并找到operationButtons
数组中的第一个元素的isShow
属性,并将其值修改为false
。
// 获取tableConfig对象
JsonObject tableConfig = jsonObject.getAsJsonObject("tableConfig");
// 获取toolbar对象
JsonObject toolbar = tableConfig.getAsJsonObject("toolbar");
// 获取operationButtons数组
JsonArray operationButtons = toolbar.getAsJsonArray("operationButtons");
// 获取第一个元素
JsonObject firstButton = operationButtons.get(0).getAsJsonObject();
// 修改isShow属性值为false
firstButton.addProperty("isShow", false);
将修改后的JsonObject转换回JSON字符串
需要将修改后的JsonObject
对象转换回JSON字符串。可以使用Gson
类的toJson()
方法来实现这一点。
import com.google.gson.Gson;
Gson gson = new Gson();
String modifiedJsonString = gson.toJson(jsonObject);
System.out.println(modifiedJsonString);
现在,已经成功地修改了JSON字符串中的isShow
属性值,并将修改后的对象转换回了JSON字符串。这个过程中,使用了Gson库的强大功能,逐层解析了JSON对象,并修改了指定的属性值。
我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!
今天关于php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)的介绍到此结束,谢谢您的阅读,有关Go生成json、解析json和多维json数组解析、java – 使用JSON.org解析器从HttpClient请求解析JSON、java中使用fastjson、jackson、json-lib解析JSON-------------------妈妈再也不用担心JSON解析、Java解析JSON并修改属性值:从JSON到JsonObject的逐层解析等更多相关知识的信息可以在本站进行查询。
本文标签: