Python 如何在.json字典中的特定位置添加新键?
我想在预先存在的.json文件中添加一个新密钥Python 如何在.json字典中的特定位置添加新键?,python,json,python-3.x,package.json,Python,Json,Python 3.x,Package.json,我想在预先存在的.json文件中添加一个新密钥 { "AcquisitionMatrixPE": 63, "AcquisitionNumber": 5, "AcquisitionTime": "08:06:20.100000", "BodyPartExamined": "BRAIN", "CogAtlasID": "TODO", "CoilString": "SENSE-Head-8", "ConversionSoftware": "dcm2niix", "Con
{
"AcquisitionMatrixPE": 63,
"AcquisitionNumber": 5,
"AcquisitionTime": "08:06:20.100000",
"BodyPartExamined": "BRAIN",
"CogAtlasID": "TODO",
"CoilString": "SENSE-Head-8",
"ConversionSoftware": "dcm2niix",
"ConversionSoftwareVersion": "v1.0.20190410 GCC6.3.0",
"DeviceSerialNumber": "4sEr9bzYud6E",
"EchoTime": 0.030001,
"EchoTrainLength": 59,
"FlipAngle": 80,
"ImageOrientationPatientDICOM": [1, 0, 0, 0, 1, 0],
"ImageType": [
"ORIGINAL",
"PRIMARY",
"M",
"FFE",
"M",
"FFE"
],
"ImagingFrequency": 127.779,
"InPlanePhaseEncodingDirectionDICOM": "COL",
"InstitutionName": "OHSU_MRI3",
"MRAcquisitionType": "2D",
"MagneticFieldStrength": 3,
"Manufacturer": "Philips",
"ManufacturersModelName": "Intera",
"Modality": "MR",
"PartialFourier": 0.936508,
"PatientPosition": "HFS",
"PercentPhaseFOV": 93.75,
"PhaseEncodingAxis": "j",
"PhaseEncodingSteps": 63,
"PhilipsRWVIntercept": 0,
"PhilipsRWVSlope": 1.22833,
"PhilipsRescaleIntercept": 0,
"PhilipsRescaleSlope": 1.22833,
"PhilipsScaleSlope": 0.000766453,
"PixelBandwidth": 2110,
"ProtocolName": "Resting_State_fMRI",
"ReconMatrixPE": 64,
"RepetitionTime": 3.001,
"SAR": 0.0630149,
"ScanOptions": "FS",
"ScanningSequence": "GR",
"SequenceVariant": "SK",
"SeriesDescription": "Resting_State_fMRI",
"SeriesNumber": 501,
"SliceThickness": 3.313,
"SoftwareVersions": "3.2.1_3.2.1.1",
"SpacingBetweenSlices": 3.313,
"TaskName": "TODO: full task name for rest",
"UsePhilipsFloatNotDisplayScaling": 1,
"dcmmeta_affine": [
[-3.3125, 0.0, 0.0, 106.49729919433594],
[0.0, 3.3125, 0.0, -96.91033935546875],
[0.0, 0.0, 3.3125, -38.010536193847656],
[0.0, 0.0, 0.0, 1.0]
],
"dcmmeta_reorient_transform": [
[0.0, -1.0, 0.0, 63.0],
[1.0, 0.0, 0.0, 0.0],
[0.0, 0.0, -1.0, 47.0],
[0.0, 0.0, 0.0, 1.0]
],
"dcmmeta_shape": [64, 64, 48, 140],
"dcmmeta_slice_dim": 2,
"dcmmeta_version": 0.6,
"global": {
"const": {
"AcquisitionDuration": 423.1409912109375,
"AcquisitionMatrix": [64, 0, 0, 63],
"AcquisitionNumber": 5,
"BitsAllocated": 16,
"BitsStored": 16,
"BodyPartExamined": "BRAIN",
"Columns": 64,
"DiffusionBValue": 0.0
}
}
}
import json
# Loading .json file
with open('/home/rrt/MyProject/Nifti2/task-rest_bold.json', 'r') as f:
json_data = json.load(f)
# Print .json file with indent
print(json.dumps(json_data,indent="\t"))
# Check if "SliceTiming" exists
if 'SliceTiming' not in json_data:
TR = json_data["RepetitionTime"]
nSlices = json_data["dcmmeta_shape"][3]
TA = TR/nSlices
# Calculate SliceTiming
SliceTiming = [0:TA:TR]
# Put SliceTiming into the .json file
json_data["SliceTiming"]= SliceTiming
if "SliceTiming" in json_data:
print(json_data["SliceTiming"])
{
"AcquisitionMatrixPE": 63,
"AcquisitionNumber": 5,
"AcquisitionTime": "08:06:20.100000",
"BodyPartExamined": "BRAIN",
"CogAtlasID": "TODO",
"CoilString": "SENSE-Head-8",
"ConversionSoftware": "dcm2niix",
"ConversionSoftwareVersion": "v1.0.20190410 GCC6.3.0",
"DeviceSerialNumber": "4sEr9bzYud6E",
"EchoTime": 0.030001,
"EchoTrainLength": 59,
"FlipAngle": 80,
"ImageOrientationPatientDICOM": [1, 0, 0, 0, 1, 0],
"ImageType": [
"ORIGINAL",
"PRIMARY",
"M",
"FFE",
"M",
"FFE"
],
"ImagingFrequency": 127.779,
"InPlanePhaseEncodingDirectionDICOM": "COL",
"InstitutionName": "OHSU_MRI3",
"MRAcquisitionType": "2D",
"MagneticFieldStrength": 3,
"Manufacturer": "Philips",
"ManufacturersModelName": "Intera",
"Modality": "MR",
"PartialFourier": 0.936508,
"PatientPosition": "HFS",
"PercentPhaseFOV": 93.75,
"PhaseEncodingAxis": "j",
"PhaseEncodingSteps": 63,
"PhilipsRWVIntercept": 0,
"PhilipsRWVSlope": 1.22833,
"PhilipsRescaleIntercept": 0,
"PhilipsRescaleSlope": 1.22833,
"PhilipsScaleSlope": 0.000766453,
"PixelBandwidth": 2110,
"ProtocolName": "Resting_State_fMRI",
"ReconMatrixPE": 64,
"RepetitionTime": 3.001,
"SAR": 0.0630149,
"ScanOptions": "FS",
"ScanningSequence": "GR",
"SequenceVariant": "SK",
"SeriesDescription": "Resting_State_fMRI",
"SeriesNumber": 501,
"SliceThickness": 3.313,
"SoftwareVersions": "3.2.1_3.2.1.1",
"SpacingBetweenSlices": 3.313,
"TaskName": "TODO: full task name for rest",
"UsePhilipsFloatNotDisplayScaling": 1,
"dcmmeta_affine": [
[-3.3125, 0.0, 0.0, 106.49729919433594],
[0.0, 3.3125, 0.0, -96.91033935546875],
[0.0, 0.0, 3.3125, -38.010536193847656],
[0.0, 0.0, 0.0, 1.0]
],
"dcmmeta_reorient_transform": [
[0.0, -1.0, 0.0, 63.0],
[1.0, 0.0, 0.0, 0.0],
[0.0, 0.0, -1.0, 47.0],
[0.0, 0.0, 0.0, 1.0]
],
"dcmmeta_shape": [64, 64, 48, 140],
"dcmmeta_slice_dim": 2,
"dcmmeta_version": 0.6,
"global": {
"const": {
"AcquisitionDuration": 423.1409912109375,
"AcquisitionMatrix": [64, 0, 0, 63],
"AcquisitionNumber": 5,
"BitsAllocated": 16,
"BitsStored": 16,
"BodyPartExamined": "BRAIN",
"Columns": 64,
"DiffusionBValue": 0.0
}
}
}
import json
# Loading .json file
with open('/home/rrt/MyProject/Nifti2/task-rest_bold.json', 'r') as f:
json_data = json.load(f)
# Print .json file with indent
print(json.dumps(json_data,indent="\t"))
# Check if "SliceTiming" exists
if 'SliceTiming' not in json_data:
TR = json_data["RepetitionTime"]
nSlices = json_data["dcmmeta_shape"][3]
TA = TR/nSlices
# Calculate SliceTiming
SliceTiming = [0:TA:TR]
# Put SliceTiming into the .json file
json_data["SliceTiming"]= SliceTiming
if "SliceTiming" in json_data:
print(json_data["SliceTiming"])
- 我正在使用python3和Jupyter笔记本
- 预先存在的.json文件(名称:task-rest_bold.json)如下所示
查看其他来源,在JSON对象的中间添加一个值似乎是不可能的。 关于这个问题的答案是: 打开带有写入标志的文件:
import json
with open(json_file) as json_file:
json_decoded = json.load(json_file)
json_decoded['ADDED_KEY'] = 'ADDED_VALUE'
with open(json_file, 'w') as json_file:
json.dump(json_decoded, json_file)
但是,该值会附加到json对象。您在文件中找不到它,也不会写入它。您必须将其保存回文件中。大多数/所有json解析器都不会保留json对象的顺序。有关更多详细信息,请参阅。json对象是无序的key:values集合(如本文所述)。我不习惯处理.json文件。。。。.json字典的顺序是否重要?有可能找到某个键的位置或索引吗?@user12077723:json对象是键:值对的无序集合。他们没有“索引”或“位置”。@Brunodesshuilliers是对的。JSON文件并不意味着可以原始查看,因此顺序并不重要。在代码中使用json文件时,键是检索链接到该键的数据所需的唯一值。不要太担心顺序,只要担心密钥和数据对是否在json文件中即可。