Skip to content

Commit

Permalink
support FastjsonUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
呈铭 committed Mar 14, 2024
1 parent df2dcae commit 650570e
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 0 deletions.
6 changes: 6 additions & 0 deletions bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
<!-- Build args -->
<module.install.skip>true</module.install.skip>
<module.deploy.skip>true</module.deploy.skip>
<fastjson.version>1.2.83</fastjson.version>
</properties>

<dependencyManagement>
Expand Down Expand Up @@ -444,6 +445,11 @@
<artifactId>sofa-common-tools</artifactId>
<version>${sofa.common.tools.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
Expand Down
5 changes: 5 additions & 0 deletions core/common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>

</dependencies>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.rpc.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.lang.reflect.Type;

/**
* Fastjson 工具类
*
* @author chengming
* @version FastjsonUtils.java, v 0.1 2024年03月14日 1:36 PM chengming
*/
public class FastjsonUtils {

private static final ParserConfig safeParserConfig = new ParserConfig();

public FastjsonUtils() {
}

public static ParserConfig getSafeInstance() {
return safeParserConfig;
}

public String toJSONString(Object obj) {
return JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);
}

public <T> T toJavaObject(String json, Type type) {
return JSON.parseObject(json, type);
}

public static JSONObject parseObject(String text) {
Object obj = JSON.parse(text, safeParserConfig);
if (obj instanceof JSONObject) {
return (JSONObject) obj;
} else {
try {
return (JSONObject) JSON.toJSON(obj);
} catch (RuntimeException var3) {
throw new JSONException("can not cast to JSONObject.", var3);
}
}
}

public static <T> T parseObject(String text, Class<T> clazz) {
return JSON.parseObject(text, clazz, safeParserConfig, null, JSON.DEFAULT_PARSER_FEATURE, new Feature[0]);
}

public static <T> T parseObject(String text, TypeReference<T> type, Feature... features) {
return JSON.parseObject(text, type.getType(), safeParserConfig, JSON.DEFAULT_PARSER_FEATURE, features);
}

public static Object read(String json, String path) {
return JSONPath.compile(path).eval(JSON.parse(json, safeParserConfig));
}

static {
safeParserConfig.setSafeMode(true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alipay.sofa.rpc.common.utils;

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import org.junit.Before;
import org.junit.Test;

import java.util.Map;

import static org.junit.Assert.assertEquals;

public class FastjsonUtilsTest {

private FastjsonUtils fastjsonUtilsTest;

@Before
public void setUp() throws Exception {
fastjsonUtilsTest = new FastjsonUtils();
}

@Test
public void testToJSONString() {
assertEquals("obj", fastjsonUtilsTest.toJSONString("obj"));
}

@Test
public void testToJSONStringWithObject() {
assertEquals("{\"age\":1,\"name\":\"name\"}", fastjsonUtilsTest.toJSONString(new TestClass(1, "name")));
}

@Test
public void testParseObject() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("age", 1);
jsonObject.put("name", "name");
assertEquals(jsonObject, FastjsonUtils.parseObject("{\"age\":1,\"name\":\"name\"}"));
}

@Test
public void testParseObjectWithObject() {
TestClass testClass = FastjsonUtils.parseObject("{\"age\":1,\"name\":\"name\"}", TestClass.class);
assertEquals(1, testClass.age);
assertEquals("name", testClass.name);
}

@Test
public void testParseObjectWithMap() {
Map<String, String> map = FastjsonUtils.parseObject("{\"age\":1,\"name\":\"name\"}",
new TypeReference<Map<String, String>>() {
});
assertEquals("1", map.get("age"));
assertEquals("name", map.get("name"));
}

public static class TestClass {
int age;

String name;

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

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
}

0 comments on commit 650570e

Please sign in to comment.