OSArch Community

ifcopenshell validate How to output legal json

  1. C

    when using json_logger with this sample script

    
    outfile = open(target_file, "wb")  # /path/file.ifc
    
    json_logger = ifcopenshell.validate.json_logger()
    
    ifcopenshell.validate.validate(ifc_file, json_logger)
    
    original_stdout = sys.stdout  # Save a reference to the original standard output
    
    print(f"original_stdout\n{original_stdout}")
    
    with open(target_file, 'w') as outfile:
    
        sys.stdout = outfile  # Change the standard output to the file we created.
    
        print(json_logger.statements)
    
        sys.stdout = original_stdout  # Reset the standard output to its original value
    
        outfile.close()
    
    print(json_logger.statements)
    

    Output from json_logger.statements is single line / single quoted

    
    [{'level': 'error', 'message': 'Attribute <entity IfcFurnitureType>.<attribute AssemblyPlace: <enumeration IfcAssemblyPlaceEnum: (FACTORY, NOTDEFINED, SITE)>> not optional', 'instance': #12552 .........................
    

    so question is HowTo get output as valid json file?

  2. C

    Does anyone know if there's a way to serialize full ifcopenshell entities?

    @CadGiru what do you want a json for? if you don't need to reconstruct the objects, but just want to store the info in a file, you could just store the string representation of the entities:

    
    import json
    
    
    # your previous code
    
    
    statements = json_logger.statements
    
    for statement in statements:
    
        statement['instance'] = str(statement['instance'])
    
    
    with open('/path/to/file.json', "w") as f:
    
        json.dump(statements, f, indent=4)
    
  3. C

    @cvillagrasa Corect, however I need to reconstruct the objects for further processing...

Login or Register to reply.