今天在做项目的时候遇到一个这样的需求,需要后端去处理json数据,然后根据前端传过来的值进行匹配。把最终的数据传给第三方。
maven 依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
把json文件给放到资源文件下,如图:address.json
json里面的数据格式是这样的
{
"1":"中国",
"1100":"北京市",
....
}
在idea中开发的时候我是这样写的
@Test
public void jsonTest(){
try {
File jsonFile = ResourceUtils.getFile("classpath:address.json");
String json = FileUtils.readFileToString(jsonFile, "UTF-8");
System.out.println(json);
JSONObject jsonObject = JSONObject.parseObject(json);
String aa = "1100";
String bb = "2309";
Object value1 = null;
Object valueshi = null;
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
}
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
if (entry.getKey().equals(aa)){
value1 = entry.getValue();
//System.out.println("aa是"+entry.getValue());
}
if (entry.getKey().equals(bb)){
valueshi = entry.getValue();
//System.out.println("bb是"+entry.getValue());
}
}
System.out.println(value1+""+valueshi);
} catch (Exception e) {
e.printStackTrace();
}
}
自己调试的时候是没什么问题的,可以把这个数据给转换成map,之后再根据键值对获取数据。这样就可以根据前端传过来的值去匹配,获取正确的值。满心欢喜去打包发布,然后就报了错,查看报错信息,之后百度。说是在source(资源文件中的内容即json)在打成jar的时候是挂到上面的,并不存在于资源文件中,因而报了没有发现这个json文件的异常。之后通过流的方式去处理。修改之后的代码是这样的
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
@SpringBootTest
public class TestApplication {
@Test
public void Test3(){
// 打成jar包后 读取json文件
ClassPathResource resource = new ClassPathResource("address.json");
StringBuilder builder = new StringBuilder();
try {
InputStreamReader json = new InputStreamReader(resource.getInputStream(),"UTF-8");
// 读取文件
BufferedReader bfReader = new BufferedReader(json);
String tmpContent = null;
while ((tmpContent = bfReader.readLine()) != null){
builder.append(tmpContent);
}
String str = builder.toString();
JSONObject jsonObject = JSONObject.parseObject(str);
String aa = "1100";
String bb = "2309";
Object value1 = null;
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
if (entry.getKey().equals(aa)){
value1 = entry.getValue();
}
}
System.out.println("转换后的字符串"+value1);
System.out.println("原来的字符串"+builder);
bfReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样发布到服务器上就不会出现问题了,可以读到资源文件中的json内容啦。要是有什么不懂的地方欢迎大家留言讨论。